使用 EPPLUS 从列表导出到 Excel

Posted

技术标签:

【中文标题】使用 EPPLUS 从列表导出到 Excel【英文标题】:export to Excel from a list with EPPLUS 【发布时间】:2016-09-15 12:42:43 【问题描述】:

我正在尝试使用 EPPLUS 将列表导出到 c# 中的 Excel,当我执行程序时不要给我错误,但是当我打开 Excel 时,我发现这不是正确的数据,他输入了项目+对象的名称与对象具有列表的次数一样多:

对象的代码:

class Stock
        
            public string Nif;
            public string Proveedor;
            public string Coodigo;
            public string descripcion;
            public string Catalogo;
            public string Estadistico;
            public decimal StockOn;

        

当这些列表(lstStock)被填满时,我创建一个 Excel 并使用选项 loadfromcollection :

        System.IO.FileInfo f = new System.IO.FileInfo("D:\\stock_termos.xlsx");
            if (f.Exists) f.Delete();
            using (ExcelPackage ep = new ExcelPackage(f))
               
                ExcelWorksheet hoja = ep.Workbook.Worksheets.Add("TOTAL OBSOLETOS");
                hoja.Cells[1, 1].Value = "NIF"; ;
                hoja.Cells[1, 2].Value = "Proveedor";
                hoja.Cells[1, 3].Value = "Código";
                hoja.Cells[1, 4].Value = "Descripción";
                hoja.Cells[1, 5].Value = "Catálogo";
                hoja.Cells[1, 6].Value = "Cod.Estadístico";
                hoja.Cells[1, 7].Value = "Stock On";
                hoja.Cells[2, 1].LoadFromCollection(lstStock);
            

提示是,当我在 VisualStudio 中调试应用程序时,我可以看到列表已正确填充:

所以我认为错误是当我尝试使用 LoadFromCollection 方法将数据导出到 Excel 时,但我不知道出了什么问题,请帮忙。

【问题讨论】:

这能回答你的问题吗? Generic Excel Generator function for EPPlus 【参考方案1】:

您使用的是什么版本的 EPPlus?我问是因为我很惊讶它不会像当前最新的 4.1.0 那样引发错误。也许旧版本更宽容。

但要回答您的问题,如果您查看最终调用的 LoadFromCollection 的最终重载签名,您会看到:

public ExcelRangeBase LoadFromCollection<T>(IEnumerable<T> Collection, bool PrintHeaders, TableStyles TableStyle, BindingFlags memberFlags, MemberInfo[] Members)

请注意,Epplus 仅查看 MemberInfos 而不是 Fields,这是您反对使用的。如果您将Stock 对象更改为:

class Stock

    public string Nif  get; set; 
    public string Proveedor  get; set; 
    public string Coodigo  get; set; 
    public string descripcion  get; set; 
    public string Catalogo  get; set; 
    public string Estadistico  get; set; 
    public decimal StockOn  get; set; 

您应该会看到结果。

【讨论】:

谢谢,你是对的,我不知道为什么我不把 get;set 我一直这样做。 EPPLUS的版本是4.0.4.0 @Ion,没什么大不了的,有时会发生在我们所有人身上:)。有趣的是 4.0.4 版没有抛出异常。实际上,4.1 这样做更好,至少您知道测试时出了点问题。

以上是关于使用 EPPLUS 从列表导出到 Excel的主要内容,如果未能解决你的问题,请参考以下文章

使用 EPPlus 将 DataTable 导出到 Excel

C# 使用Epplus导出数据到Excel

导出Excel之Epplus使用教程2(样式设置)

导出Excel之Epplus使用教程4(其他设置)

导出Excel之Epplus使用教程3(图表设置)

Epplus:导出Excel