给定一个工作簿,其中包含Coldfusion 9
通过Apache POI
生成的跨表公式。
我想以编程方式强制整个工作簿执行“依赖树重建的完整计算”,然后将工作簿保存到磁盘。
因此,当我的最终用户打开电子表格时,他们不必按 Ctrl - Alt - Shift - F9
如何在coldfusion
完成此操作?
参考文献:
答案 0 :(得分:7)
不幸的是,这个问题没有简单的答案。
选项1:
我认为最短的路线是使用CreationHelper.createFormulaEvaluator().evaluateAll()
。不幸的是,它不适用于CF9。该方法在POI的更高版本中添加,而不是CF9附带的版本。这同样适用于setForceFormulaRecalculation()
。您可以使用JavaLoader.cfc来加载更新版本的POI。然后你就可以访问这些方法了。但是这可能比你想要的任务涉及更多。
选项2:
如果你不知道,如果你知道正确的顺序,你可以遍历工作表并重新计算每个工作表的公式:
wb = sheet.getWorkBook();
evaluator = wb.getCreationHelper().createFormulaEvaluator();
// you could also use an array of sheet names instead
for(sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
poiSheet = wb.getSheetAt(sheetNum);
rows = poiSheet.rowIterator();
while (rows.hasNext()) {
r = rows.next();
cells = r.cellIterator();
while (cells.hasNext()) {
c = cells.next();
if (c.getCellType() == c.CELL_TYPE_FORMULA) {
evaluator.evaluateFormulaCell(c);
}
}
}
}
选项3:
另一种可能性是使用自动recalculates when the workbook opens的宏填充模板。明显的缺点是它依赖于宏。但由于它本身是由Excel执行的,因此它可能是最可靠/最强大的选项。