一尘不染

export to Excel from a list with EPPLUS

c#

i´m trying to export a list to Excel in c# with EPPLUS, when i execute the
program don´t give me errors, but when i open the Excel i see that are not the
correct data, he put the name of the projet+the name of the object as many
times as objects have the list: enter image description
here

The code of the object:

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

        }

and when thes list(lstStock) is filled i create an Excel and use the option
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);
            }

The cuestión is that when i debug the aplication in VisualStudio i can see the
list is correctly filled:

enter image description
here

So i think the error is when i try to export the data to Excel, with the
LoadFromCollection method, but i can´t se what is wrong, please help.


阅读 322

收藏
2020-05-19

共1个答案

一尘不染

What version of EPPlus are you using? I ask because I am surprised it does not
throw an error as it does with 4.1.0 which is currently the latest. Maybe an
older version is more forgiving.

But to answer you question, if you look at the signature of the final overload
of LoadFromCollection that is eventually called you will see this:

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

Notice that Epplus is only looking at MemberInfos and not a Fields which
is what you object is using. If you change Stock object to this:

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; }
}

You should see results.

2020-05-19