我最近升级到新版本的JXLS(从1.0.2开始),发现它造成了重大的性能损失。我的用例是根据模板编写excel报告。以前,这些报告是在4分钟内完成的,但现在要写出来需要60多分钟。我正在使用
JxlsHelper.getInstance().processTemplate(is, os, context);
调用以处理模板(遵循教程here)。我尝试使用变形金刚(poi和jexcel),但都没有给我以前版本的JXLS所做的表现。
想知道升级后是否有其他人有类似的经历或解决了类似的性能问题。
答案 0 :(得分:1)
一般情况下,jxls-2应该比jxls-1表现更好。 可能你有一些特定的模板,但事实并非如此。 如果您可以共享或创建示例,我们可以调查问题的根本原因。您可以在bitbucket issue tracker创建问题。
除此之外,请检查jxls-demo project中输出许多数据行的以下示例
如果您需要生成数百万条记录,SXSSF转换器是最快的,但它仅适用于简单的模板。
此外,如果模板中有很多公式,请尝试禁用公式处理,看看它是否有帮助。您可以使用 JxlsHelper 的setProcessFormulas(false)
方法执行此操作。
如果没有任何帮助,只需在问题跟踪器中提交问题。
答案 1 :(得分:0)
对于小型电子表格(30,000行),这很棒。
我正在努力使用电子表格在v2.2.5中,所有表格都有超过100万行。我正在使用:setProcessFormulas(false)和expect< 60秒它似乎永远旋转,我没有看到一个完整的。
即使我正在使用InputStream,我也看到很少的cpu使用情况,就像它只在一个线程上运行一样。我已经使用了其他xls编写策略来处理更大的电子表格而没有太多问题,所以它看起来像是内部的。
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));
}
}