【问题标题】:apache poi copy from very large xls to new workbook sheetapache poi 从非常大的 xls 复制到新的工作簿表
【发布时间】:2016-09-27 21:51:07
【问题描述】:

我有非常大的 xls 文件,其中包含两张纸。我想将这两张纸合二为一并复制到新工作簿。但是当我尝试访问这个大 xls 时出现内存不足异常,如下所示:

FileInputStream fis = new FileInputStream(new File("input.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(fis);

我尝试使用 xls 的事件 api:http://poi.apache.org/spreadsheet/how-to.html#event_api 但是使用它我们只能读取单元格值。但是这里我需要复制到新的excel表。

【问题讨论】:

  • 您是否使用-XmsXmx 参数增加了堆大小?
  • 是的。我试过了,但它不起作用。我需要通过程序解决一些其他问题。
  • 请提供一些细节。两个工作簿的大小分别是单元格数 (H x V) 和兆字节数。
  • 文件大小为 97MB 。有 65k 行。
  • 这不是一个“大”文件,它应该适合大多数现代系统。你试过-Xms1G -Xmx2G吗?您可以在具有更多内存的系统上运行它吗?您使用的是 64 位 JVM 吗?

标签: java apache-poi


【解决方案1】:

Apache POI 提供低内存占用SXSSF API 来将数据写入 xlsx。它不会一次将所有内容加载到内存中,因此它是处理非常大的 excel 文件时的解决方案。您可能需要考虑这一点。

【讨论】:

  • 我正在尝试从 xls 文件复制,而 SXSSF 适用于 xlsx
  • 是的,SXSSF 适用于 excel 2007(xslx)
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
相关资源
最近更新 更多