使用 EPPLUS 从列表导出到 Excel
export to Excel from a list with EPPLUS
我正在尝试使用 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 时,但我看不出哪里出了问题,请帮忙。
您使用的是什么版本的 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; }
}
您应该会看到结果。
我正在尝试使用 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 时,但我看不出哪里出了问题,请帮忙。
您使用的是什么版本的 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; }
}
您应该会看到结果。