解决excelPoi模板导出时公式不自动计算的问题,亲测有效

解决excelPoi模板导出时公式不自动计算的问题,亲测有效

需求:多列数据合并,自动计算值。

过程:

一开始自动计算值,用的是:

=SUM(G4:G16)

并且已经按网上说的添加了poi的配置,并通过formulaEvaluator对formula表达式进行了eval计算。

但是导出时,还是没有效果。

个人理解原因是被叠加的数值,其实际类型还不是“数值”(虽然excel里面显示已经是数值了)。

于是想到一个办法:*1

=SUM(G4*1,G5*1,G6*1,G7*1,G8*1,G9*1,G10*1,G11*1,G12*1,G13*1,G14*1)

问题解决。

下面是 部分代码和截图:

拼接表达式:

   OrgRouteMonthScheduleResp.RouteRunSchedule routeRunSchedule = grandChild.getRoutes().get(grandChild.getRoutes().size() - 1);
                StringBuilder upDownLength = new StringBuilder("=SUM(");
                StringBuilder times = new StringBuilder("=SUM(");
                StringBuilder time = new StringBuilder("=SUM(");
                StringBuilder miles = new StringBuilder("=SUM(");
                for (int i = index; i < index + grandChild.getRoutes().size() - 1; i++) {
                    if (i == index + grandChild.getRoutes().size() - 2) {
                        upDownLength.append("G").append(i).append("*1)");
                        times.append("W").append(i).append("*1)");
                        time.append("X").append(i).append("*1)");
                        miles.append("Y").append(i).append("*1)");
                    } else {
                        upDownLength.append("G").append(i).append("*1,");
                        times.append("W").append(i).append("*1,");
                        time.append("X").append(i).append("*1,");
                        miles.append("Y").append(i).append("*1,");
                    }
                }
                routeRunSchedule.setUpDownLength(upDownLength.toString());
                routeRunSchedule.setMonth(new OrgRouteMonthScheduleResp.RouteRunMonthStac(times.toString(), miles.toString(), time.toString()));

设置自动计算,以及通过formulaEvaluator计算:

注意:这两个都要添加才行。

workbook.setForceFormulaRecalculation(true);

        FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
        for (Row r : sheet) {
            for (Cell c : r) {
                if (c != null) {
                    String cell = c.getStringCellValue();
                    if (cell.indexOf("=") == 0) {
                        c.setCellFormula(cell.substring(1));
                        evaluator.evaluate(c);
                    } else {
                        c.setCellValue(c.getStringCellValue() + "");
                        evaluator.evaluate(c);
                    }
                }
            }
        }

excel截图:

模板:

参考:

https://blog.csdn.net/fengchangshuo/article/details/105671187

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值