解决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