【问题标题】:How to lazily read big Excel 2007 files with Apache POI如何使用 Apache POI 懒惰地读取 Excel 2007 大文件
【发布时间】:2013-06-12 12:49:02
【问题描述】:

我想用 Apache POI 阅读一个大的 Excel 2007 文件。 Quick start guide 声明应该使用 File 来节省内存。

打开工作簿时,可以是 .xls HSSFWorkbook,也可以是 .xlsx XSSFWorkbook,工作簿可以从文件或 输入流。使用 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 懒惰地阅读吗?

【问题讨论】:

    标签: memory apache-poi lazy-evaluation


    【解决方案1】:

    POI 提供了一个事件模型 API,可以处理延迟加载。更多详情请访问POI documentation pages about eventmodelother streaming options

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      • 2020-03-21
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多