Как отредактировать существующий большой файл Excel с SXSSF Streaming API - PullRequest
0 голосов
/ 22 октября 2019

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

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

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

Вторая строка этого кода переводит ОЗУ в память5gb.

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

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

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

Есть ли способ выполнить чтение и запись в существующей книге Large excel с более чем 400 000 строк.

1 Ответ

1 голос
/ 22 октября 2019

Посмотрите на нижнюю часть страницы " Overview " из POI . Он имеет следующую таблицу:

Сводка функций API электронных таблиц table

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

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

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

...