【发布时间】:2015-11-12 11:45:42
【问题描述】:
我正在使用NPOI 处理 Excel 文件。以下是我读取文件的方式:
using (FileStream stream = File.OpenRead(excelFilePath))
{
IWorkbook wb = WorkbookFactory.Create(stream);
...
}
但是,对于任何大于几兆字节的 XLSX 文件,它会导致内存使用量猛增至大约 1GB 并最终引发 OOM 异常。
做一些研究,我found out 发现,奇怪的是,从文件而不是流加载工作簿会减少 POI 的内存消耗。与我提供的使用 Files 的 Java 示例最接近的 C# 等效如下:
OPCPackage pkg = OPCPackage.Open(new FileInfo(excelFilePath));
XSSFWorkbook wb = new XSSFWorkbook(pkg);
但它似乎使用相同的底层实现,因为内存使用量仍然相同并导致 OutOfMemory 异常。
NPOI 是否有用于处理大型 XLSX 文件的内置功能?
也欢迎提出可以处理 XLS 和 XLSX 文件的替代库的建议。
【问题讨论】:
-
使用各种帮助程序通过 SAX 阅读它需要更多的工作,但不会太多。你试过that approach, as documented in the POI website吗?
标签: c# excel out-of-memory apache-poi npoi