从EPPLUS的列表中导出到Excel

8 浏览
0 Comments

从EPPLUS的列表中导出到Excel

我正在尝试使用EPPLUS将一个列表导出到C#中的Excel,当我执行程序时没有出现错误,但是当我打开Excel时发现数据不正确,它将项目名称+对象名称放置在列表中的每个对象上:

enter image description here

对象的代码:

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中调试应用程序时,我可以看到列表被正确填充:

enter image description here

所以我认为错误发生在我尝试使用LoadFromCollection方法将数据导出到Excel时,但我看不出错在哪里,请帮助。

0
0 Comments

问题的原因是EPPlus版本的问题。EPPlus的4.1.0版本会抛出错误,而4.0.4版本则不会。具体来说,问题出现在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; }
}

,问题将得到解决。

另外,EPPlus的4.0.4版本没有抛出异常也是一个有趣的发现。相比之下,4.1版本至少能够在测试时提示出现了问题。

0