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

创建XSSFWorkbook实例读取XSLX文件时出现OutOfMemory问题

周瀚
2023-03-14

根据业务功能,我们需要在多线程环境中的不同位置读取多个excel文件(包括.xls和.xlsx格式)。每个线程负责读取一个文件。为了测试性能,我们用。xls和。xlsx格式创建了2个文件集。一个文件集只有20行数据,而另一个文件集包含300,000行数据。我们能够成功地读取。xls格式的两个文件,并将数据加载到表中。即使对于20行的data.xlsx文件,我们的源代码也运行良好。但是当执行流开始读取。xlsx文件时,application server突然终止。当我开始跟踪这个问题时,我在创建XSSFWorkbook实例时遇到了一个奇怪的问题。请参考下面的代码片段:

OPCPackage opcPackage = OPCPackage.open(FILE);
System.out.println("Created OPCPackage instance.");
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
System.out.println("Created XSSFWorkbook instance.");
SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(workbook, 1000);
System.out.println("Created SXSSFWorkbook instance.");[/code]
Process XLSX file EXCEL_300K.xlsx start.
Process XLSX file EXCEL.xlsx start.
Created OPCPackage instance.
Created OPCPackage instance.
Created XSSFWorkbook instance.
Created SXSSFWorkbook instance.
Process XLSX file EXCEL.xlsx end.

桑卡尔。

共有1个答案

阚英睿
2023-03-14

在尝试了许多解决方案后,我发现处理XLSX文件需要巨大的内存。但是使用POI3.12库有多种优点。

  1. 处理excel文件的速度更快。
  2. 有更多的API来处理excel文件,如关闭工作簿、使用文件实例打开excel文件等
 类似资料:
  • 我正在实现一个从s3获取文件、读取并删除它的路由。问题是删除后继续搜索文件并进入错误,我不明白为什么路由不停止。 这是我的

  • 假设N是根号,三者将创建N-1,N-2,N-3的左中右节点。 EX: 等。 我的 TreeNode 类具有以下变量: 每当我构造一个整数大于 28 的树时,我都会得到一个 OutOfMemoryError。我的递归方法是效率低下还是很自然?谢谢!

  • 我正在尝试读取1500 csv文件,但我收到以下错误。 读取时出错。表(file=file,header=header,sep=sep,quote=quote,:不允许重复的“row.names” 代码: 但当单独打开并保存文件时,我可以读取文件。但由于有1500个文件,我需要手动完成。如有任何帮助,我将不胜感激?

  • 问题内容: 无论如何,我可以写到tempfile并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command / tmp / some-temp-file。 提前谢谢了。 问题答案: 如果需要带有名称的临时文件,则必须使用该功能。然后就可以使用了。有关详细信息,请阅读 http://docs.python.org/library/tempfile.html。

  • 我正在尝试创建一个可执行的。jar文件。我一直在互联网上试图找出如何从命令提示符来做到这一点。