Ошибка OutOfMemory при создании экземпляра XSSFWorkbook для чтения файла XSLX

В соответствии с бизнес-функциями нам необходимо читать несколько файлов Excel (как.xls, так и.xlsx) в разных местах в многопоточной среде. Каждый поток отвечает за чтение файла. Чтобы протестировать производительность, мы создали 2 набора файлов в форматах.xls и.xlsx. Один набор файлов содержит только 20 строк данных, в то время как другой набор файлов содержит 300000 строк данных. Мы можем успешно читать оба файла в формате.xls и загружать данные в таблицу. Даже для файла.xlsx с 20 строками наш исходный код работает нормально. Но когда поток выполнения начинает читать файл.xlsx, сервер приложений прерывается. Когда я начал искать проблему, я столкнулся со странной проблемой при создании экземпляра XSSFWorkbook. См. Фрагмент кода ниже:

OPCPackage opcPackage = OPCPackage.open(FILE);
System.out.println("Created OPCPackage instance.");
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
System.out.println("Created XSSFWorkbook instance.");
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook, 1000);
System.out.println("Created SXSSFWorkbook instance.");[/code]

Выход

Process XLSX file EXCEL_300K.xlsx start.
Process XLSX file EXCEL.xlsx start.
Created OPCPackage instance.
Created OPCPackage instance.
Created XSSFWorkbook instance.
Created SXSSFWorkbook instance.
Process XLSX file EXCEL.xlsx end.

Для большого набора файлов выполнение зависает на XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); вызывая проблему пространства кучи. Пожалуйста, помогите мне решить эту проблему.

Заранее спасибо.

Спасибо,

Sankar.

1 ответ

Перепробовав множество решений, я обнаружил, что обработка файлов XLSX требует огромной памяти. Но использование библиотеки POI 3.12 имеет несколько преимуществ.

  1. Обрабатывает файлы Excel быстрее.
  2. Имеет больше API для обработки файлов Excel, таких как закрытие рабочей книги, открытие файла Excel с использованием экземпляра файла и т. Д.
Другие вопросы по тегам