Memory 如何使用ApachePOI懒洋洋地读取大型Excel2007文件

Memory 如何使用ApachePOI懒洋洋地读取大型Excel2007文件,memory,apache-poi,lazy-evaluation,Memory,Apache Poi,Lazy Evaluation,我想用ApachePOI阅读一个大的Excel2007文件。声明应使用文件来节省内存 打开工作簿时,请选择.xls HSSF工作簿或.xlsx XSSF工作簿,可以从文件或 输入流。使用文件对象可以降低内存消耗, 而InputStream需要更多内存,因为它必须缓冲 整个文件 因此,我大致这样写: opcPackage = OPCPackage.open(file); XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); XSSFSheet

我想用ApachePOI阅读一个大的Excel2007文件。声明应使用
文件
来节省内存

打开工作簿时,请选择.xls HSSF工作簿或.xlsx XSSF工作簿,可以从文件或 输入流。使用文件对象可以降低内存消耗, 而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堆空间

我希望迭代只能缓慢地加载那些要读取的行,就像流一样


如何解决大型Excel文件的内存问题?我可以用ApachePOI懒洋洋地阅读吗?

POI提供了一个EventModelAPI,可以处理懒洋洋的加载。有关更多详细信息,请访问和