2

我正在SocketConnectionException为批量数据(超过 50 万条记录)生成 Excel 文件。

我的 Web 应用程序的代码写入 `outputstream. 这是一段代码:

while (sr.next()) {
      counter++;  //advance counter
      view = (DataClass) sr.get(0);
      try {
          //writing fields values for Activity Report file
          reportService.writeExcelFieldsValue(rowCounter,sheet,view,user,exportedFields);
          rowCounter++;
      } catch (Exception e) {
          throw new RuntimeException(e);
      }

      if (counter == chunkSize || sr.isLast()) {
          counter = 0;  //reset counter
          //Clear the session after a chunk and before next chunk
          getSession().clear();
      }
}
wb.write(bos);
bos.flush();
4

1 回答 1

0

POI 提供建立在 XSSF 之上的低内存占用 SXSSF API。

SXSSF 是 XSSF 的 API 兼容的流式扩展,可在必须生成非常大的电子表格且堆空间有限时使用。SXSSF 通过限制对滑动窗口内行的访问来实现其低内存占用,而 XSSF 允许访问文档中的所有行。不再在窗口中的旧行变得不可访问,因为它们被写入磁盘。

在自动刷新模式下,可以指定访问窗口的大小,以在内存中保存一定数量的行。当达到该值时,创建附加行会导致索引最低的行从访问窗口中删除并写入磁盘。或者,可以将窗口大小设置为动态增长;它可以根据需要通过显式调用 flushRows(int keepRows) 定期修剪。

由于实现的流性质,与 XSSF 相比存在以下限制:

  • 在某个时间点只能访问有限数量的行。
  • 不支持 Sheet.clone()。不支持公式评估
  • 我认为此链接可能对您有所帮助

我想你会想要使用 XSSF EventModel 代码。请参阅POI 文档以开始使用。或欲了解更多详情,请单击此处

此链接也可能对您有所帮助。 使用 POI 将大型结果集写入 Excel 文件

于 2013-03-15T07:46:10.310 回答