XSSFWorkbook需要花费大量时间来加载

Lon*_*guy 8 java excel optimization apache-poi xssf

我使用以下代码:

File file = new File("abc.xlsx");
InputStream st = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(st);
Run Code Online (Sandbox Code Playgroud)

xlsx文件本身有25,000行,每行包含500列内容.在调试过程中,我看到我创建XSSFWorkbook的第三行,需要花费大量时间(1小时!)才能完成此语句.

有没有更好的方法来访问原始xlsx文件的值?

Gag*_*arr 19

首先,当你有一个文件时,不要从InputStream加载XSSFWorkbook!使用InputStream需要将所有内容缓冲到内存中,这会占用空间并占用时间.既然你不需要做那个缓冲,不要!

如果您使用最新的每晚POI版本运行,那么它非常简单.您的代码变为:

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

否则,它非常相似:

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

  • 如果使用文件打开它,则比使用输入流打开时缓冲的更少 (2认同)