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

时间:2012-06-22 10:44:14

标签: java excel optimization apache-poi xssf

我使用以下代码:

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

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

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

2 个答案:

答案 0 :(得分:17)

首先,当你有一个文件时,不要从InputStream加载XSSFWorkbook!使用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);

答案 1 :(得分:0)

考虑使用POI的流式版本。这将根据需要将文件的子集加载到内存中。处理大文件时,这是推荐的方法。

POI SXSSF