给定一个包含由 Coldfusion 9
通过 Apache POI
生成的跨表公式的工作簿。
我想以编程方式强制整个工作簿在将工作簿保存到磁盘之前执行“使用依赖树重建的完整计算”。
因此,当我的最终用户打开电子表格时,他们不必按 Ctrl-Alt-Shift- F9.
如何在 coldfusion
中完成此操作?
引用资料:
最佳答案
不幸的是,这个问题没有简单的答案。
选项 1:
我认为最短路线是使用CreationHelper.createFormulaEvaluator().evaluateAll()
.不幸的是,它在 CF9 中不可用。该方法是在比 CF9 附带的版本更高的 POI 版本中添加的。这同样适用于 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 本身执行的,因此它可能是最可靠/最强大的选择。
关于coldfusion - 在 Coldfusion/Apache POI 中强制完整计算整个工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997798/