【发布时间】:2017-09-22 07:21:56
【问题描述】:
我有一个包含 200,000 行的 DataTable。
我想将 DataTable 导出到 excel 文件中。但它给出了System.OutOfMemoryException 错误。
using (ExcelPackage objExcelPackage = new ExcelPackage())
{
ExcelWorksheet objWorksheet =
objExcelPackage.Workbook.Worksheets.Add("Conversion Data");
objWorksheet.Cells["A1"].LoadFromDataTable(FinalResult, true);
}
【问题讨论】:
-
请出示您用于导出的相关代码。
-
使用 (ExcelPackage objExcelPackage = new ExcelPackage()) { ExcelWorksheet objWorksheet = objExcelPackage.Workbook.Worksheets.Add("转换数据"); objWorksheet.Cells["A1"].LoadFromDataTable(FinalResult, true);
-
ExcelPackage 似乎是至少 2 年未更新的第三方库。为什么不使用正确的 OpenXML SDK?
-
更好的是,为什么不使用 EPPlus?它可以很好地从数据表和集合中加载数据,并使创建 xlsx 文件变得更加容易。
-
在哪里出现这个错误呢?发布完整的异常,包括调用堆栈。您如何创建该数据表?如果您从没有行的列表或数据表开始并一次添加一个,您可以获得 OOM。每次用完时,集合都会将其内部缓冲区加倍。对于 200K 行,有很多丢弃的缓冲区。内存可能会变得如此碎片化,以至于运行时无法为最新的缓冲区分配内存