Как добавить лист в существующий файл Excel, не сталкиваясь с OutOfMemoryError? - PullRequest
0 голосов
/ 21 октября 2018

У меня есть файл Excel на одном листе с ~ 150 тысячами строк.

Я использовал SXSSFWorkbook для создания этого файла, и с ним пока нет никаких проблем.

Теперь я планирую открыть файл и добавить новый лист, содержащий, скажем, одну строку в нем:

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

new 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:15) ~ [na: 1.8.0_151] at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource $ FakeZipEntry. (ZipInputStreamZipEntrySource.java:129) ~ [poi-ooxml-3.11.jar: 3.11] org. org.openxml4j.util.ZipInputStreamZipEntrySource. (ZipInputStreamZipEntrySource.java:55) ~ [poi-ooxml-3.11.jar: 3.11] at 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]

... и т. д.

Вопрос в следующем: как мне открыть файл с видом, чтобы создать новый лист с несколькими строками в нем (на самом деле не так много строк)?

Важно отметить, что пространство кучиочень ограничен, и нет возможности увеличить его.

...