当前位置: 首页 > 知识库问答 >
问题:

XSSFWorkbook需要大量时间来加载

公孙慎之
2023-03-14

我正在使用以下代码:

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

xlsx文件本身有25,000行,每行有500列的内容。在调试过程中,我看到我创建XSSFWorkbook的第三行,需要很多时间(1小时!)来完成这个语句。

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

共有2个答案

澹台新知
2023-03-14

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

POI SXSSF

壤驷涛
2023-03-14

首先,当您有文件时,不要从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);
 类似资料:
  • 我有一个使用模块的运行的进程: 其结果是: 这里,调用来处理图像(附件)并将OCR结果输出到myop。txt。 现在,我希望这在多个进程上发生,代表这个注释(或者直接看到这个),所以代码在这里: 这段代码所做的是调用4次,将流程对象保存在列表中,遍历所有这些对象,直到它们全部完成。下面给出了无限循环实现的说明。 这里的问题是后一个程序需要花费大量的时间来完成。它一直在使用函数等待进程完成,该函数为

  • 问题内容: 我正在使用以下代码: xlsx文件本身具有25,000行,每行包含500列的内容。在调试过程中,我看到创建XSSFWorkbook的第三行需要很长时间(1小时!)来完成此语句。 有没有更好的方法来访问原始xlsx文件的值? 问题答案: 首先,当您有文件时,不要从InputStream加载XSSFWorkbook!使用InputStream需要将所有内容缓冲到内存中,这会占用空间并占用时

  • 我正在用CXF开发一个SOAP客户端。我有WSDL2Java生成的代码。我做了一个JAR可执行文件来测试。当我尝试提出请求时,我首先这样做: WSDL是web服务的URL。 service_name是服务的QName。 MintService是从wsdl2java代码生成的类。 MintServiceSOAP是endpoint的QName MintService.class是WSLD2Java生成

  • 我正在努力改进我写的一个数据传输程序。我在寻找如何让它更快的建议。我的程序通过填充ResultSet并将结果写入文件来从数据库(通常是Oracle11g)中提取数据。该程序定期查看表,并查询某个特殊列是否发生了更改。例如,这可能是这样一个查询:

  • 我正在运行一个简单的MySQL查询来查找用户玩游戏的总时间: EXPLAIN显示了以下内容: 重要的是,该表使用InnoDB引擎并限制了大约200万条记录。

  • 我正在尝试将excel文件转换为XSSFWorkbook,我有大约7000行和大约145列。将excel文件转换为第2行的XSSFWorkbook大约需要15分钟,代码如下:- 我不想向XFFSWorkbook添加7000行,只想在第2行转换时向XFFSWorkbook添加30行? 如果没有,如何减少将excel转换为XSSFWorkbook所需的时间?