Как отредактировать существующий большой файл Excel с помощью API потоковой передачи SXSSF

У меня есть большой лист Excel в формате XLSX с 400000 строками. Я хочу читать и писать в этой существующей книге.

Когда я попытался прочитать его на java с помощью Apache poi, со следующим кодом:

FileInputStream fileInputStream = new FileInputStream(new File(excelPath));
Workbook wb = new XSSFWorkbook(fileInputStream);

Вторая строка этого кода занимает до 5 ГБ ОЗУ.

Apache POI предоставил потоковый API SXSSF для обработки больших файлов Excel.

http://poi.apache.org/components/spreadsheet/how-to.html

Теперь, когда я создаю экземпляр книги SXSSF с конструктором без каких-либо параметров, он создает новую книгу и не сохраняет существующие данные книги. И другой конструктор книги SXSSF принимает экземпляр книги XSSF. И здесь начинает возникать проблема. Когда я создал экземпляр книги XSSF для моего файла Excel, объем оперативной памяти увеличивается и возникает исключение OUTOFMEMORY.

Есть ли способ выполнить операцию чтения и записи в существующей большой книге Excel с более чем 400000 строк.

1 ответ

Посмотрите на нижнюю часть страницы " Обзор " POI. В нем есть такая таблица:

Сводная информация о функциях API электронных таблиц https://poi.apache.org/components/spreadsheet/images/ss-features.png

Последний столбец показывает, что SXSSF может только записывать файлы, но не читать их.

Для чтения файлов, потоковой передачи в третьем столбце указано, что вам нужно использовать модель событий XSSF.

Итак, чтобы изменить файл потоковой передачи, чтобы не использовать много памяти, вам нужно читать с помощью одного API и записывать новый файл с помощью другого API.

Другие вопросы по тегам