我使用以下代码:
File file = new File("abc.xlsx");
InputStream st = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(st);
xlsx文件本身有25,000行,每行包含500列内容。在调试过程中,我看到了创建XSSFWorkbook的第三行,需要花费大量时间(1小时!)才能完成此语句。
有没有更好的方法来访问原始xlsx文件的值?
答案 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的流式版本。这将根据需要将文件的子集加载到内存中。处理大文件时,这是推荐的方法。