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. Это позволит загрузить часть файла в память по мере необходимости. Это рекомендуемый метод при работе с большими файлами.