Apache POI - java.lang.OutOfMemoryError - 读写

Apache POI - java.lang.OutOfMemoryError - Read and Write

当我尝试读取、格式化和写入 23MB 的 xlsx 文件中的一行时,我遇到了 OutOfMemoryError。我要求只格式化文件的 header。

我尝试过使用 InputStream、File 和 OPCPackage:

1)
InputStream inp = new FileInputStream(path);
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(inp);

2)
InputStream inp = new FileInputStream(path);
File file = new File(path);
Files.copy(inp, file.toPath(), StandardCopyOption.REPLACE_EXISTING);            
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(file);

3)
OPCPackage pkg = OPCPackage.open(path);
XSSFWorkbook wb = (XSSFWorkbook) WorkbookFactory.create(pkg);

完全没有成功。

我看过一些使用 XSSFReader、SXSSFWorkbook 的示例,但它无法解决我的问题,因为我需要覆盖该行,所以我认为我真的需要一个工作簿。

有没有人用Apache POI对大xlsx文件实现读写操作?

PS:如果解决方案是生成另一个文件,我需要原始文件的格式,因为内容已经格式化。

我将 POI 版本从“2017 年 9 月”的 3.17 更新到“2021 年 1 月”的 5.0.0。还有 commons-compress 从 1.4.1 到 1.20。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.20</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
</dependency>

现在我可以打开文件并进行更改了。