1

我最近升级到新版本的 JXLS(从 1.0.2 开始),发现它对性能造成了重大影响。我的用例是基于模板编写 excel 报告。以前4分钟就写完报告,现在60多分钟就写出来了。我正在使用

JxlsHelper.getInstance().processTemplate(is, os, context);

调用来处理模板(按照这里的教程)。我尝试同时使用 Transformer(poi 和 jexcel),但两者都没有给我以前版本的 JXLS 所提供的性能。

想知道其他人是否有类似的经历或升级后解决了类似的性能问题。

4

2 回答 2

1

在一般情况下,jxls-2 应该比 jxls-1 执行得更好。可能您有一些不正确的特定模板。如果您可以分享它或创建一个示例,我们可以调查问题的根本原因。您可以在bitbucket issue tracker创建问题。

除此之外,请检查jxls-demo 项目中的以下示例,该示例输出许多数据行

如果您需要生成数百万条记录,SXSSF 转换器是最快的,但它仅适用于简单的模板。

此外,如果您的模板中有很多公式,请尝试禁用公式处理,看看是否有帮助。您可以使用JxlsHelpersetProcessFormulas(false)的方法来做到这一点。

如果没有任何帮助,只需在问题跟踪器中提交问题。

于 2015-08-14T08:06:40.630 回答
0

For tiny spreadsheets (30,000 rows) it's great.

I'm struggling with v2.2.5 with a spreadsheet that has over 1 million rows across all sheets. I'm using: setProcessFormulas(false) and expect < 60 seconds. It seems to spin forever and I haven't seen one complete.

Even though I'm using an InputStream I see very little cpu usage as if its operating only on a single thread. I've used other xls writing strategies that have handled much larger spreadsheets without much issue so it would appear to be something internal.

protected void workbookToStream(Map beanParams, OutputStream os) throws IOException {
      try(InputStream is = new ByteArrayInputStream(templateBytes)) {
         JxlsHelper helper = JxlsHelper.getInstance();
         helper.setProcessFormulas(false);
         helper.processTemplate(is, os, new Context(beanParams));
      }
}
于 2015-09-08T14:40:26.840 回答