C#把DataTable中数据,高效导出Excel

本文介绍了一种使用COM操作提高DevExpress导出Excel效率的方法,通过自定义导出流程,实现比DevExpress自带方法快近10倍的速度提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         因为DevExpress.XtraGrid.GridControl.ExportToExcel方法导出Excel效率实在是太低了,13000条记录差不多要用10分钟,让我无法容忍。估用以下方法导出,提高效率近10倍

public void Save()
        {
            string fileName = "";
//以下DataSet根据自己实际定义,本人的u_ListBase1是继承自DevExpress.XtraGrid.GridControl
            DataSet ds2 = u_ListBase1.GetCurrentDataSet();//选中要保存的数据

            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls"; //设置对话框保存的文件类型  
            saveFileDialog1.Title = "保存导出数据......";                       //设置对话框标题  
            saveFileDialog1.InitialDirectory = @"c:\";                          //设置初始保存路径  
            saveFileDialog1.RestoreDirectory = true;                            //设置保存对话框是否记忆上次打开的目录  
            saveFileDialog1.ShowHelp = true;                                    //设置是否显示帮助按钮  
            u_ListBase1.ShowFooter = false;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {

                fileName = saveFileDialog1.FileName;   //文件名
                SuperToExcel(ds2.Tables[0], fileName);
                u_ListBase1.ShowFooter = true;
             }
        }
        //高效导出Excel
        public static bool SuperToExcel(System.Data.DataTable excelTable, string filePath)
        {
            Excel.Application app =
                new Excel.ApplicationClass();
            try
            {
                app.Visible = false;
                Workbook wBook = app.Workbooks.Add(true);
                Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
                Excel.Range range;
                int colIndex = 0;
                int rowIndex = 0;
                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].Caption;
                }
                range = (Range)wSheet.get_Range(app.Cells[1, 1], app.Cells[1, colCount]);
                range.Interior.ColorIndex = 15;//背景色 灰色
                range.Font.Bold = true;//粗字体
                //获取实际数据

                for (rowIndex = 0; rowIndex < rowCount; rowIndex++)
                {
                    for (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();
                return true;
            }
            catch (Exception err)
            {
                MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
            finally
            {
            }
        }

com操作excel的一些特性操作:

range.NumberFormatLocal = "@";     //设置单元格格式为文本 
range = (Range)worksheet.get_Range("A1", "E1");     //获取Excel多个单元格区域:本例做为Excel表头
range.Merge(0);     //单元格合并动作
worksheet.Cells[1, 1] = "Excel单元格赋值";     //Excel单元格赋值
range.Font.Size = 15;     //设置字体大小
range.Font.Underline=true;     //设置字体是否有下划线
range.Font.Name="黑体";     设置字体的种类
range.HorizontalAlignment=XlHAlign.xlHAlignCenter;     //设置字体在单元格内的对其方式
range.ColumnWidth=15;     //设置单元格的宽度
range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //设置单元格的背景色
range.Borders.LineStyle=1;     //设置单元格边框的粗细
range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     //给单元格加边框
range.EntireColumn.AutoFit();     //自动调整列宽
Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式
Range.VerticalAlignment= xlCenter     //文本垂直居中方式
Range.WrapText=true;     //文本自动换行
Range.Interior.ColorIndex=39;     //填充颜色为淡紫色
Range.Font.Color=clBlue;     //字体颜色
xlsApp.DisplayAlerts=false;     //保存Excel的时候,不弹出是否保存的窗口直接进行保存
workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值