使用EPPLUS将dataTable导出到Excel(2007).xls的初体验

上篇说到,用NPOI导到.xlsx之后总是存在“文件已损坏”的提示,很烦。后来查了一下,最好是用NPOI导到.xls,用EPPLUS导到.xlsx。所以今天记录一下如何使用EPPLUS将dataTable导入excel2007的文件。


首先还是如何添加引用

然后添加引用,就是最后一行 using OfficeOpenXml;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.IO;
using OfficeOpenXml;

然后是函数部分。

    /// <summary>
    /// DataTable导出Excel2007(.xlsx)
    /// </summary>
    /// <param name="dt">数据表</param>
    ///<param name="filepath">文件路径</param>
    ///<param name="sheetname">Excel工作表名</param>

public void dtToExcel2007(DataTable dt, string filepath, string sheetname)

创建对象

            ExcelPackage ep = new ExcelPackage();
            ExcelWorkbook wb = ep.Workbook;
            ExcelWorksheet ws = wb.Worksheets.Add(result);

设置文件信息(也可以不设)

            //配置文件属性
            wb.Properties.Category = "类别";
            wb.Properties.Author = "作者";
            wb.Properties.Comments = "备注";
            wb.Properties.Company = "公司";
            wb.Properties.Keywords = "关键字";
            wb.Properties.Manager = "管理者";
            wb.Properties.Status = "内容状态";
            wb.Properties.Subject = "主题";
            wb.Properties.Title = "标题";
            wb.Properties.LastModifiedBy = "最后一次保存者";

设置文件信息(也可以不设,使用默认值)

            //表格设置
            ws.Cells.Style.Font.Name = "微软雅黑";
            ws.Cells.Style.Font.Size = 12;
            ws.Row(1).Style.Font.Size = 14;
            ws.DefaultColWidth = 20;//未生效
            ws.Column(2).Width = 30;

我就很奇怪为啥默认列宽一直不生效啊……

写入文件,保存

            ws.Cells["A1"].LoadFromDataTable(dt, true);
            ep.SaveAs(new FileInfo(filepath)); 

结束。整个类文件不到50行。然后还好使,很神奇。

最后写一下我在winform里是如何调用的

            //判断保存格式是xls还是xlsx
            string str = "";
            int a = txtSavePathExcel.Text.LastIndexOf('.');
            str = txtSavePathExcel.Text.Substring(a+1).ToString();
            switch (str)
            {
                case "xls":
                     npoiDtToExcel ex = new npoiDtToExcel();
                     ex.dtToExcel2003(dtXml, txtSavePathExcel.Text, "result");
                     break;
                case "xlsx":
                    epplusDtToExcel ex1 = new epplusDtToExcel();
                    ex1.dtToExcel2007(dtXml, txtSavePathExcel.Text, "result");
                    break;
            }

至于NPOI和EPPLUS的速度,我的数据可能是少,没有太大差别。一个1.76s,一个1.78s。


参考文章  C#使用第三方组件Epplus操作Excel表 - 骑着代码搞机械 - 博客园  

                  学习笔记——通过EPPlus导出Excel文件 - CSDN博客               

                   1.ASP.NET MVC使用EPPlus,导出数据到Excel中 - CSDN博客  

                  使用EPPlus(C#)读写Excel - CSDN博客  

没有更多推荐了,返回首页