我想用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吗?
答案 0 :(得分:2)
POI提供了一个应该处理延迟加载的eventmodel API。有关详细信息,请访问POI documentation pages about eventmodel和other streaming options。