我使用下面的代码:
File file = new File("abc.xlsx");
InputStream st = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(st);
在XLSX文件本身有25,000行和每行有500列的内容。 在调试过程中,我看到的是,第三排,我创建一个XSSFWorkbook,需要花费大量的时间(1小时!)来完成这一说法。
有没有更好的方式来访问原始的xlsx文件的值?
我使用下面的代码:
File file = new File("abc.xlsx");
InputStream st = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(st);
在XLSX文件本身有25,000行和每行有500列的内容。 在调试过程中,我看到的是,第三排,我创建一个XSSFWorkbook,需要花费大量的时间(1小时!)来完成这一说法。
有没有更好的方式来访问原始的xlsx文件的值?
首先,不要从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);
考虑使用POI的流版本。 这将需要的文件的子集加载到内存中。 这是大文件打交道时的推荐方法。
SXSSF POI