我有一个包含 400,000 行的大型 .xlsx Excel 工作表。我想在这个现有的工作簿中阅读和写作。
当我尝试使用 Apache poi 在 java 中读取它时,代码如下:
FileInputStream fileInputStream = new FileInputStream(new File(excelPath));
Workbook wb = new XSSFWorkbook(fileInputStream);
此代码的第二行占用 RAM 高达 5GB。
Apache POI 提供了 SXSSF Streaming API 来处理大型 Excel 文件。
http://poi.apache.org/components/spreadsheet/how-to.html#sxssf
现在,当我使用不带任何参数的构造函数实例化 SXSSF 工作簿时,它会创建新的工作簿,并且不会保留工作簿的现有数据。 SXSSF 工作簿的其他构造函数采用 XSSF 工作簿的实例。问题就从这里开始出现。当我为 Excel 文件创建 XSSF 工作簿实例时,RAM 变高并抛出 OUTOFMEMORY 异常。
有没有办法对现有的超过 400,000 行的大型 Excel 工作簿进行读写操作。
最佳答案
最后一列显示SXSSF只能写入文件,不能读取文件。
要读取文件、流式传输,第三列显示需要使用XSSF eventmodel。
因此,要修改文件、流式传输,以免使用大量内存,您需要使用一个 API 读取并使用另一个 API 写入新文件。
关于java - 如何使用 SXSSF Streaming api 编辑现有的大型 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500415/