使用EPPLUS从列表导出到Excel

Ion*_*Ion 3 c# excel list sql-server-2008 epplus

我正在尝试使用EPPLUS将列表导出到Excel中的Excel,当我执行程序时不给我错误,但是当我打开Excel时,我看到的不是正确的数据,他把projet的名称+对象的名称与对象一样多次具有列表: 在此输入图像描述

对象的代码:

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

        }
Run Code Online (Sandbox Code Playgroud)

当填充thes list(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);
            }
Run Code Online (Sandbox Code Playgroud)

cuestión是当我调试VisualStudio中的应用程序时,我可以看到列表已正确填充:

在此输入图像描述

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

Ern*_*e S 5

您使用的是什么版本的EPPlus?我问,因为我很惊讶它没有像4.1.0那样抛出错误,这是目前最新的.也许旧版本更宽容.

但要回答你的问题,如果你看一下最终重载的签名LoadFromCollection最终会被调用,你会看到:

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

请注意,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; }
}
Run Code Online (Sandbox Code Playgroud)

你应该看到结果.