首页 文章

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

提问于
浏览
4

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

打开工作簿(.xls HSSFWorkbook或.xlsx XSSFWorkbook)时,可以从File或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 回答

相关问题