如何使用Apache POI懒惰地阅读大型Excel 2007文件

时间:2013-06-12 12:49:02

标签: memory apache-poi lazy-evaluation

我想用Apache POI阅读一个大的Excel 2007文件。 Quick start guide声明应使用File来保存记忆。

  

打开工作簿时,可以是.xls HSSFWorkbook,也可以是.xlsx   XSSFWorkbook,可以从文件或文件加载工作簿   的InputStream。使用File对象可以降低内存消耗,   而InputStream需要更多内存,因为它必须缓冲   整个文件。

因此,我写了大约这个:

opcPackage = OPCPackage.open(file);
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
XSSFSheet sheet = workbook.getSheetAt(0);
rows = sheet.rowIterator();
if (rows.hasNext()) {
Row row = rows.next();
    System.out.println(row.getCell(1).getStringCellValue());
}

但是,对于超过大约10000行的工作表,会产生java.lang.OutOfMemoryError: Java heap space

我希望迭代只是懒惰地加载那些要读取的行,就像流一样。

如何解决大型Excel文件的内存问题?我可以懒惰地阅读Apache POI吗?

1 个答案:

答案 0 :(得分:2)

POI提供了一个应该处理延迟加载的eventmodel API。有关详细信息,请访问POI documentation pages about eventmodelother streaming options