C# 几十万级数据导出Excel,及Excel各种操作

    先上导出代码
    /// <summary>
            /// 导出速度最快
            /// </summary>
            /// <param name="list"><列名,数据></param>
            /// <param name="filepath"></param>
            /// <returns></returns>
            public bool NewExport(List<DictionaryEntry> list, string filepath)
            {
                bool bSuccess = true;
                Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();
                System.Reflection.Missing miss = System.Reflection.Missing.Value;
                appexcel = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook workbookdata = null;
                Microsoft.Office.Interop.Excel.Worksheet worksheetdata = null;
                Microsoft.Office.Interop.Excel.Range rangedata;  

                workbookdata = appexcel.Workbooks.Add();  

                //设置对象不可见
                appexcel.Visible = false;
                appexcel.DisplayAlerts = false;
                try
                {
                    foreach (var lv in list)
                    {
                        var keys = lv.Key as List<string>;
                        var values = lv.Value as List<IList<object>>;
                        worksheetdata = (Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets.Add(miss, workbookdata.ActiveSheet);  

                        for (int i = 0; i < keys.Count-1; i++)
                        {
                            //给工作表赋名称
                            worksheetdata.Name = keys[0];//列名的第一个数据位表名
                            worksheetdata.Cells[1, i + 1] = keys[i+1];
                        }  

                        //因为第一行已经写了表头,所以所有数据都应该从a2开始
                        rangedata = worksheetdata.get_Range("a2", miss);
                        Microsoft.Office.Interop.Excel.Range xlrang = null;  

                        //irowcount为实际行数,最大行
                        int irowcount = values.Count;
                        int iparstedrow = 0, icurrsize = 0;  

                        //ieachsize为每次写行的数值,可以自己设置
                        int ieachsize = 10000;  

                        //icolumnaccount为实际列数,最大列数
                        int icolumnaccount = keys.Count-1;  

                        //在内存中声明一个ieachsize×icolumnaccount的数组,ieachsize是每次最大存储的行数,icolumnaccount就是存储的实际列数
                        object[,] objval = new object[ieachsize, icolumnaccount];
                        icurrsize = ieachsize;  

                        while (iparstedrow < irowcount)
                        {
                            if ((irowcount - iparstedrow) < ieachsize)
                                icurrsize = irowcount - iparstedrow;  

                            //用for循环给数组赋值
                            for (int i = 0; i < icurrsize; i++)
                            {
                                for (int j = 0; j < icolumnaccount; j++)
                                {
                                    var v = values[i + iparstedrow][j];
                                    objval[i, j] = v != null ? v.ToString() : "";
                                }
                            }
                            string X = "A" + ((int)(iparstedrow + 2)).ToString();
                            string col = "";
                            if (icolumnaccount <= 26)
                            {
                                col = ((char)(‘A‘ + icolumnaccount - 1)).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();
                            }
                            else
                            {
                                col = ((char)(‘A‘ + (icolumnaccount / 26 - 1))).ToString() + ((char)(‘A‘ + (icolumnaccount % 26 - 1))).ToString() + ((int)(iparstedrow + icurrsize + 1)).ToString();
                            }
                            xlrang = worksheetdata.get_Range(X, col);
                            xlrang.NumberFormat = "@";
                            // 调用range的value2属性,把内存中的值赋给excel
                            xlrang.Value2 = objval;
                            iparstedrow = iparstedrow + icurrsize;
                        }
                    }
                    ((Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets["Sheet1"]).Delete();
                    ((Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets["Sheet2"]).Delete();
                    ((Microsoft.Office.Interop.Excel.Worksheet)workbookdata.Worksheets["Sheet3"]).Delete();
                    //保存工作表
                    workbookdata.SaveAs(filepath, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);
                    workbookdata.Close(false, miss, miss);
                    appexcel.Workbooks.Close();
                    appexcel.Quit();  

                    System.Runtime.InteropServices.Marshal.ReleaseComObject(workbookdata);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(appexcel.Workbooks);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(appexcel);
                    GC.Collect();
                }
                catch (Exception ex)
                {
                    ErrorMsg = ex.Message;
                    bSuccess = false;
                }
                finally
                {
                    if (appexcel != null)
                    {
                        ExcelImportHelper.KillSpecialExcel(appexcel);
                    }
                }
                return bSuccess;
            }  
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.Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone; //设置单元格上边框为无边框     

range.EntireColumn.AutoFit();     //自动调整列宽     

Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式     

Range.VerticalAlignment= xlCenter     //文本垂直居中方式     

Range.WrapText=true;     //文本自动换行     

Range.Interior.ColorIndex=39;     //填充颜色为淡紫色     

Range.Font.Color=clBlue;     //字体颜色     

xlsApp.DisplayAlerts=false;   //对Excel的操作 不弹出提示信息
ApplicationClass xlsApp = new ApplicationClass(); // 1. 创建Excel应用程序对象的一个实例,相当于我们从开始菜单打开Excel应用程序。
if (xlsApp == null)
{
//对此实例进行验证,如果为null则表示运行此代码的机器可能未安装Excel
}  

1. 打开现有的Excel文件  

Workbook workbook = xlsApp.Workbooks.Open(excelFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Worksheet mySheet = workbook.Sheets[1] as Worksheet; //第一个sheet页
mySheet.Name = "testsheet"; //这里修改sheet名称  

2.复制sheet页  

mySheet.Copy(Type.Missing, workbook.Sheets[1]); //复制mySheet成一个新的sheet页,复制完后的名称是mySheet页名称后加一个(2),这里就是testsheet(2),复制完后,Worksheet的数量增加一个  

注意 这里Copy方法的两个参数,指是的复制出来新的sheet页是在指定sheet页的前面还是后面,上面的例子就是指复制的sheet页在第一个sheet页的后面。
3.删除sheet页  

xlsApp.DisplayAlerts = false; //如果想删除某个sheet页,首先要将此项设为fasle。
(xlsApp.ActiveWorkbook.Sheets[1] as Worksheet).Delete();  

4.选中sheet页  

(xlsApp.ActiveWorkbook.Sheets[1] as Worksheet).Select(Type.Missing); //选中某个sheet页  

5.另存excel文件  

workbook.Saved = true;
workbook.SaveCopyAs(filepath);  

6.释放excel资源  

workbook.Close(true, Type.Missing, Type.Missing);
workbook = null;
xlsApp.Quit();
xlsApp = null;
  
时间: 2024-10-09 13:33:58

C# 几十万级数据导出Excel,及Excel各种操作的相关文章

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult 导出EXCEL方法总结:MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可:优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件: 2.设置输出头为:application/ms-excel,再输出拼接的HTM

sqlserver 导出数据到Excel

1.导出非正式Excel EXEC master..xp_cmdshell 'bcp t.dbo.tcad out D:\MySelf\output\Temp.xls -c -q -S"." -U"sa" -P"sql2008"'--参数:S 是SQL服务器名:U是用户:P是密码 2.启用/停用xp_cmdshell -- To allow advanced options to be changed. EXEC sp_configure 'sh

Dynamics CRM导出数据到Excel

原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM将数据导出到Excel的功能. (一)导出数据到Excel的三种类型 下图中点击红框内的按钮EXPORT TO EXCEL,会弹出三个选项 第一个是一个静态工作表,将当前页面内的数据导出到一张表内.该数据是静态的,也就是说CRM里的数据发生改变,工作表的数据不会发生相应修改.如果勾选了”Make t

php导出数据到excel,防止身份证等数字字符格式变成科学计数的方-------缺点,必须使用table tr td

php导出数据到excel,防止身份证等数字字符格式变成科学计数的方 时间:2012-08-17 13:50来源:未知 作者:硅峰网络-红豆 点击:219次 在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel的格式为文本格式. 我试用过第一种确实可以显示,但是有个'号在那里感觉确实不是很好,虽然听说不影响,但是需要用户点击那个单元格那个单引号才消失,并且在该 在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel

在ASP.NET Web Forms中使用页面导出伪xls Excel表格

将数据导出为Excel表格是比较常见的需求,也有很多组件支持导出真正的Excel表格.由于Excel能打开HTML文件,并支持其中的table元素以及p之类的文本元素的显示,所以把.html扩展名改为.xls是比较常用的一种方式.当然这只是一种骗人的伎俩,所以我称之为伪xls表格.不过对于要求不高的需求,这种方法还是比较简单快捷的. 在Web Forms项目中,除了用代码拼凑HTML元素标记外,还可以直接用窗体页面渲染HTML表格.Web Forms就是用来渲染动态HTML的,直接利用它,支持代

PHP导出数据到Excel

PHP导出数据到Excel 在Web开发中经常需要将一些数据导入到Excel表格中,比如需要导出符合条件的用户数据,导出项包括姓名.性别.***号.联系方式等等.那么问题来了,在导出的数据中如果出现比较长的数值类型的项时,默认按科学计数法表示,比如***号这显然不是我们需要的,那么我们怎么做才能让数据按我们要求的格式显示呢? 查到一些相关资料,摘抄如下: 首先,我们了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

CodeIgniterCodeigniter+PHPExcel导出数据到Excel文件

解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:--application\libraries\PHPExcel.php--application\libraries\PHPExcel(文件夹)修改application\libraries\PHPExcel\IOFactory.php文件--将其类名从PHPExcel_IOFactory改为IOFactory,遵从CI类命名规则.--将其构造函数改为public $this->loa

Delphi 导出数据至Excel的7种方法【转】

转自:http://blog.csdn.net/zang141588761/article/details/52275948 一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):boolean; const xlNormal=-4143; var y : integer; tsList : TStringList; s,filename :string; a