如何在 BIRT excel 报告中呈现大量行(50k 量级)?

How to render large number of rows (order of 50k) in BIRT excel reports?

我在 java 项目中使用 BIRT runtime 4.8.0 生成 Excel 报告。 excel 报告有 1k 列,可以有 10k 到 50k 行(1 个查询的结果,映射到 1 table)。我正在使用 spudsoft ExcelEmitter 来呈现静态 excel 报告。

数据源:Impala jdbc 连接,使用 1 个数据集和 1 个查询

问题是需要 6 到 7GB 的堆 space (java) 才能呈现此报告中的 10k 行,以便将所有内容加载到内存中,然后将其写入文件。

有什么方法可以在呈现 excel 工作表(查询结果分页、呈现等选项分文件等)?

我能够通过直接使用 Apache POI 为大型数据集(50k 行和 1k 列的顺序)生成 excel Streaming APIs. Aspose APIs 是另一个很好的工具。

使用 POI 流式 API,您可以在 2GB 的峰值 RAM 使用量下,在大约一两分钟内以 50k 行、1k 列的顺序呈现 excel。

因此,如果您扩展 Spudsoft excel emitter 以使用 POI 流 API,那么它也可以使用 BIRT 进行处理。

我用新版本的 spudsoft emitter 解决了这个问题。 这将 apache poi 从 xssf 更改为 sxssf:

ExcelEmitter.ExtractMode 实验功能!设置为 true 时,发射器对于 XLSX 文件应该 运行 更快,但功能集有限:

  • 图片将被省略。
  • 不允许合并单元格。
  • 不支持结构页眉和页脚。参见 ExcelEmitter.StructuredHeader。

https://www.eclipse.org/forums/index.php/m/1804253/#msg_1804253

使用下面的代码将限制设置为 15K。这解决了我的问题。

reportContext.getAppContext().put("MAX_PAGE_BREAK_INTERVAL", 15000);