К сожалению, на этот вопрос нет простого ответа.
Вариант 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:
Другая возможность - заполнить шаблон макросом, который автоматически пересчитывает при открытии книги . Очевидным недостатком является то, что он опирается на макрос. Но так как это выполняется самим Excel, это, вероятно, самый надежный / надежный вариант.