Как отредактировать существующий большой файл 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.