java - 如何使用 SXSSF Streaming api 编辑现有的大型 Excel 文件

标签 java apache-poi

我有一个包含 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 工作簿进行读写操作。

最佳答案

查看Overview的“POI”页面底部。它有这个表:

电子表格 API 功能摘要 table

最后一列显示SXSSF只能写入文件,不能读取文件。

要读取文件、流式传输,第三列显示需要使用XSSF eventmodel

因此,要修改文件、流式传输,以免使用大量内存,您需要使用一个 API 读取并使用另一个 API 写入新文件。

关于java - 如何使用 SXSSF Streaming api 编辑现有的大型 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58500415/

相关文章:

java - 将 json 数组导出到 excel 文件(服务器端或客户端)

Java将csv字符串写入Excel

java - 如何通过代码在 Netbeans 中添加自定义面板?

java - Log4j 2滚动文件的时间戳错误

java - 使用 apache POI 限制 Excel 不使用 Java 中的操作系统默认日期格式

java - 如何计算从一个方法发送到另一个方法的参数总数

java - 如果行数超过 64k,如何使用 apache-poi 拆分 Excel 文件?

Java:重绘()不起作用?

java - 监控 JDBC 调用

java - 检查数据是否已经存在于表中,或者检查表是否为空