C#通过DataTable高效写入Excel

参考:
C#:Excel一次性大量数据快速写入
未能加载文件或程序集“Office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”
C#把DataTable中数据,高效导出Excel
用Visual C#如何调用Excel,如何又把数据存放到Excel表格中
https://blog.csdn.net/carl2380/article/details/5990242
首先添加引用1 : using Microsoft.Office.Interop.Excel.dll; 2 :Interop.Microsoft.Office.Core.dll
自己在总结上面的案例之后,自己做了一个WPF小案例,后台代码如下:Button_Click_1只是在前台加了一个按钮

 public static void SuperToExcel(System.Data.DataTable excelTable, string filePath)
        {
            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();
            try
            {
                app.Visible = false;
                Workbook wBook = app.Workbooks.Add(true);              //Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。
                Worksheet wSheet = wBook.Worksheets[1] as Worksheet;   // Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。
                Microsoft.Office.Interop.Excel.Range range;           //范围
                app.ScreenUpdating = false;  //屏幕不跟新,加快速度             
                int colCount = excelTable.Columns.Count;//列总数
                int rowCount = excelTable.Rows.Count;//行总数
                //创建缓存数据
                object[,] objData = new object[rowCount + 1, colCount];
                //写标题,第一行各列
                int size = excelTable.Columns.Count;
                for (int i = 0; i < size; i++)
                {
                    wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ToString();
                }
                range = (Range)wSheet.get_Range(app.Cells[1, 1], app.Cells[1, colCount]);//设置工作表第一行的范围
                range.Interior.ColorIndex = 15;//背景色 灰色
                range.Font.Bold = true;//粗字体
                //获取实际数据
                for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
                {
                    for (int colIndex = 0; colIndex < colCount; colIndex++)
                    {
                        objData[rowIndex, colIndex] = excelTable.Rows[rowIndex][colIndex].ToString();
                    }
                }
                //写入Excel 
                range = (Range)wSheet.get_Range(app.Cells[2, 1], app.Cells[rowCount + 1, colCount]);
                // range.NumberFormatLocal = "@";//设置数字文本格式
                range.Value2 = objData;
                //Application.DoEvents();

               // wSheet.Columns.AutoFit();//列的宽度自适应

               //设置禁止弹出保存和覆盖的询问提示框 
                app.DisplayAlerts = false;
                app.AlertBeforeOverwriting = false;

                wBook.Saved = true;
                wBook.SaveCopyAs(filePath);

                app.Quit();
                app = null;
                GC.Collect();
            }
            catch (Exception err)
            {
                MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息");
            }


        }
        #region 单个单元格写入
        Char[] tempArray1 = new Char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'h', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd' };
        int[] tempArray2 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 };
        string fullPath2;
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            fullPath2 = "";
            System.Windows.Forms.SaveFileDialog dialog = new System.Windows.Forms.SaveFileDialog();
            dialog.Filter = "Excel文件(*.xls)|*.xls";//设置对话框保存的文件类型
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)//将ok返回默认用户公共对话框
            {
                fullPath2 = dialog.FileName;//获取文件路径和文件名
            }
            if (fullPath2 != "")
            {
                FileInfo fi = new FileInfo(fullPath2);//创建名xls文件
                fi.Directory.Create();

                SaveWaveToFile();
            }
        }
        object[] tempArray3 = new object[30];
        System.Data.DataTable DT = new System.Data.DataTable("Datas");
        private void SaveWaveToFile()
        {
            foreach (Char tempChar in tempArray1)
            {
                DT.Columns.Add(tempChar.ToString(), Type.GetType("System.String"));
            }
            DT.Columns[0].AutoIncrement = true;//是否将列的值自动递增
            // DT.Columns[0].AutoIncrementSeed = 1;//AutoIncrement属性为true的列的起始值
            DT.Columns[0].AutoIncrementStep = 1;//AutoIncrement属性为true的列使用的增量
            for (int j = 0; j < 6; j++)
            {
                tempArray3[0] = 23;
                for (int i = 1; i < 30; i++)
                {
                    tempArray3[i] = tempArray2[i - 1];
                }
                DT.Rows.Add(tempArray3);//将指定的值添加到行中/每行加完之后自动往后加
            }
            SuperToExcel(DT, fullPath2);
            this.Close();
        }
        #endregion

以上SuperToExcel函数是快速存储,还有一种是一个单元格一个单元格慢慢写,不推荐。不过大家可以参考学习,(我自己本来用的是这个 DataTabletoExcel函数,但是太慢改用SuperToExcel函数)

 // public static void DataTabletoExcel(System.Data.DataTable tempDataTable, string strFileName)
       // {
       //     if (tempDataTable == null)//如果内存标为空就返回
       //     {
       //         return;
       //     }
       //     int rowNum = tempDataTable.Rows.Count;//内存表的行数
       //     int columNum = tempDataTable.Columns.Count;//内存表的列数
       //     int rowIndex = 1;
       //     int columnIndex = 0;
       //     // Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。
       //     Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();//引用Excel对象
       //     xlapp.DefaultFilePath = "";//excel的默认路径
       //     xlapp.DisplayAlerts = true;//显示警报
       //     xlapp.ScreenUpdating = false; //停止更新屏幕,加快速度
       //     xlapp.SheetsInNewWorkbook = 1;//表示一张sheet表
       //     Workbook xlBook = xlapp.Workbooks.Add(true);//引用Excel工作簿
       //     //将DataTable的列名导入Excel表第一行

       //     foreach (System.Data.DataColumn dc in tempDataTable.Columns)
       //     {
       //         columnIndex++;
       //         //在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据
       //         xlapp.Cells[rowIndex, columnIndex] = dc.ColumnName;//分别写入列[1,1],[1,2],[1,3],[1,4]
       //     }
       //     //DataTable中的数据倒入Excel中
       //     for (int i = 0; i < rowNum; i++)//行
       //     {
       //         rowIndex++;
       //         columnIndex = 0;
       //         for (int j = 0; j < columNum; j++)//列
       //         {
       //             columnIndex++;
       //             xlapp.Cells[rowIndex, columnIndex] = tempDataTable.Rows[i][j].ToString();
       //         }
       //     }
       //     xlBook.SaveCopyAs(strFileName);
       // }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值