【问题标题】:Taking long time to generate excel file using POI使用 POI 生成 excel 文件需要很长时间
【发布时间】:2015-12-08 10:54:01
【问题描述】:

在我的项目中,我想生成一个包含 85 列的 Excel 文件,并且行会每天增加。

现在我有大约 6K 条记录。在生成文件时,它总是给我 Java 堆空间异常。

我的堆空间设置是

-Xmx2048M

-Xmx6144M

我的代码是

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("FIELD OPERATIONS TRACKER");

for (int i=0; i < list.size(); i++)
{
 HSSFRow rowHeader = sheet.createRow(i);

 HSSFCell cell = rowHeader.createCell(0);
 cell.setCellValue(list.get(i).getName());

 cell = rowHeader.createCell(1);
 cell.setCellValue(list.get(i).getSeason());

//like this  I have 85 columns here
}

请帮助我提高性能

【问题讨论】:

  • 您生成的是旧的 .xls 文件而不是 .xlsx 文件?这有充分的理由吗?如果要创建 xlsx 文件,可以使用 SXSSFWorkbook 而不是 HSSFWorkbook
  • @rjdkolb 我将尝试使用 .xlsx
  • XSSFWorkbook 是通用的 xlsx 编写器。 SXSSFWorkbook 对于非常大的文档来说是更好的选择。我用少量内存生成 10-20 兆的文档。
  • @rjdkolb 我遇到了与 SXSSFWorkbook 相同的问题。仅在 for 循环中,我得到堆空间异常
  • 使用 3.13 更改了我这边的代码,使其具有 85 个循环计数以创建 85 列和 6000 的列表大小。它在大约 2 秒内创建了一个 1.2 兆的 xlsx 文件。

标签: java excel


【解决方案1】:

如果您想创建 .xlsx 文件而不是 .xls 文件,只需将新的 HSSFWorkbook() 替换为新的 SXSSFWorkbook()

Workbook wb = new SXSSFWorkbook();

Apache POI 的人在保持不变方面做得很好。只使用接口而不是特定的类,如 HSSFCell 和 HSSFRow。

您的项目中需要两个依赖项:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>${apache.poi.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>${apache.poi.version}</version>
</dependency>

【讨论】:

  • 最新,尝试使用3.13
  • 对不起,这种方法也给了我同样的问题。实际上我必须在单行中写 85 个单元格,这是问题吗?
  • 这是我正在运行的代码:gist.github.com/rjdkolb/56c3c0cf4929b0d2bcf6
【解决方案2】:

常量.MAX_ROW_IN_MEMORY=1000; // 设置为 1000 的常量

SXSSFWorkbook workBook = new SXSSFWorkbook(Constant.MAX_ROW_IN_MEMORY); workBook.setCompressTempFiles(true);

尝试使用单参数构造函数创建 excel 文件.. 并将 CompressTempFiles 设置为 true.. 成功在单个 excel 中写入 20 万条记录,内存不足 1 GB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    相关资源
    最近更新 更多