使用jxls编写大量行以在java中表现出色

时间:2016-03-11 04:37:40

标签: java excel apache-poi jxls

我使用以下代码将数据写入excel

XLSTransformer transformer = new XLSTransformer();

        InputStream is = this.getServlet().getServletContext()
                .getResourceAsStream(templateFilePath);
        HSSFWorkbook workBook = (HSSFWorkbook) transformer.transformXLS(is, beans);

但是系统在HSSFWorkbook workBook =(HSSFWorkbook)transformer.transformXLS(is,beans)之后挂起;如果行数超过1500.是否有任何其他方式或建议用于使用大型数据集的模板和bean对象写入数据

2 个答案:

答案 0 :(得分:2)

您可以升级到Jxls-2并使用SXSSF Transformer支持。 代码可能如下所示

            Transformer transformer = PoiTransformer.createSxssfTransformer(workbook, 100, false);
            AreaBuilder areaBuilder = new XlsCommentAreaBuilder(transformer);
            List<Area> xlsAreaList = areaBuilder.build();
            Area xlsArea = xlsAreaList.get(0);
            xlsArea.applyAt(new CellRef("Result!A1"), context);

请参阅jxls-demo中的完整示例。 请注意,此方法假设某些模板限制,因为只有一部分行保留在内存中(特别是关于公式评估)。

如果您不需要公式,建议您使用context.getConfig().setIsFormulaProcessingRequired(false);

禁用公式处理

答案 1 :(得分:1)

您可以尝试使用SXSSF - POI工作簿的流式版本。这是猜测。