XSSFWorkbook занимает много времени для загрузки

Я использую следующий код:

File file = new File("abc.xlsx");
InputStream st = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(st);

сам файл xlsx имеет 25 000 строк, и каждая строка имеет содержимое в 500 столбцах. Во время отладки я увидел, что Третья строка, в которой я создаю XSSFWorkbook, занимает много времени (1 час!) для завершения этого заявления.

есть ли лучший способ получить доступ к значениям исходного файла XLSX?

2 ответов


во-первых, не загружайте XSSFWorkbook из InputStream, когда у вас есть файл! Использование InputStream требует буферизации всего в память, которая съедает пространство и занимает время. Поскольку вам не нужно делать эту буферизацию, не делайте этого!

Если вы работаете с последними ночными сборками POI, то это очень просто. Ваш код становится:

File file = new File("C:\D\Data Book.xlsx");
OPCPackage opcPackage = OPCPackage.open(file);
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);

в противном случае, это очень похожие:

File file = new File("C:\D\Data Book.xlsx");
OPCPackage opcPackage = OPCPackage.open(file.getAbsolutePath());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);

рассмотрите возможность использования потоковой версии POI. Это позволит загрузить часть файла в память по мере необходимости. Это рекомендуемый метод при работе с большими файлами.

POI SXSSF