如何在不面临OutOfMemoryError的情况下将工作表追加到现有Excel文件?

时间:2018-10-21 20:01:19

标签: java excel apache-poi out-of-memory

我有一张Excel文件,其中包含约15万行。

我使用SXSSFWorkbook来创建此文件,到目前为止,它没有任何问题。

现在,我打算打开文件并追加一个新工作表,其中包含1行:

    final FileInputStream fis = new FileInputStream(new File("file.xlsx"));
    final XSSFWorkbook xssf = new XSSFWorkbook(fis);
    final SXSSFWorkbook sxssf = new SXSSFWorkbook(xssf);

新的XSSFWorkbook(fis)导致OOM:

  

java.lang.OutOfMemoryError:Java堆空间位于   java.util.Arrays.copyOf(Arrays.java:3236)〜[na:1.8.0_151]在   java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118)   〜[na:1.8.0_151]在   java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)   〜[na:1.8.0_151]在   java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153)   〜[na:1.8.0_151]在   org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource $ FakeZipEntry。(ZipInputStreamZipEntrySource.java:129)   〜[poi-ooxml-3.11.jar:3.11]在   org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource。(ZipInputStreamZipEntrySource.java:55)   〜[poi-ooxml-3.11.jar:3.11]在   org.apache.poi.openxml4j.opc.ZipPackage。(ZipPackage.java:88)   〜[poi-ooxml-3.11.jar:3.11]在   org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:272)   〜[poi-ooxml-3.11.jar:3.11]在   org.apache.poi.util.PackageHelper.open(PackageHelper.java:37)   〜[poi-ooxml-3.11.jar:3.11]在   org.apache.poi.xssf.usermodel.XSSFWorkbook。(XSSFWorkbook.java:258)   〜[poi-ooxml-3.11.jar:3.11]

...等等。

问题是:我应该如何使用视图打开文件以创建其中包含一些行(实际上没有很多行)的新工作表?

重要的是要注意,堆空间非常有限,没有机会扩大它。

0 个答案:

没有答案