我需要读取大型Excel文件并将它们的数据导入我的应用程序。
由于POI占用了大量的堆空间来工作,经常会抛出OutOfMemory
错误,我发现有一种流式API可以以串行方式处理Excel数据(而不是完全将文件加载到内存中)
我创建了一个xlsx
工作簿,其中包含单个工作表,并在单元格中键入了多个值,然后编写了以下代码来尝试读取它:
public static void main(String[] args) throws Throwable {
// keep 100 rows in memory, exceeding rows will be flushed to disk
SXSSFWorkbook wb = new SXSSFWorkbook(new XSSFWorkbook(new FileInputStream("C:\\test\\tst.xlsx")));
SXSSFSheet sheet = (SXSSFSheet) wb.getSheetAt(0);
Row row = sheet.getRow(0);
//row is always null
while(row.iterator().hasNext()){ //-> NullPointerException
System.out.println(row.getCell(0).getStringCellValue());
}
}
然而,尽管能够正确获取其工作表,但始终会带有空的(null
)行。
我进行了研究,并在互联网上找到了几个流API的示例,但它们都是关于生成Excel文件,没有一个关于读取现有文件的。
实际上有可能从现有的.xlsx
文件中读取数据吗?
-Xmx
可以增加堆空间,我已经将其增加到了2GB,但POI无法读取20MB的文件,所以这不可行。不过还是谢谢! - bruno_cw