Как указано в Оценка формулы :
"Формат файла Excel (и .xls, и .xlsx) хранит« кэшированный »результат для каждой формулы вместе с формулойсамо по себе. Это означает, что при открытии файла его можно быстро отобразить, не тратя много времени на вычисление всех результатов формулы. Это также означает, что при чтении файла через Apache POI результат быстро доступен для вас.тоже! "
Таким образом, все формулы будут иметь кэшированные результаты, сохраненные с момента их последней оценки.Это либо последний раз, когда книга открывалась в Excel, пересчитывалась и сохранялась, либо с того момента, когда в последний раз выполнялась оценка за пределами Excel.
Так что если ячейка с формулой =TODAY()
имеет кэшированный результатиз 22-01-2018
сохранено, то 22 января 2018 г. последний раз оценивалась рабочая книга.
Чтобы всегда получать текущие результаты формул, необходимо оценить формулы сначала перед чтением.Простейший способ:
...
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
...
Или вы используете DataFormatter вместе с FormulaEvaluator :
...
DataFormatter formatter = new DataFormatter();
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
...
Cell cell = CellUtil.getCell(...);
...
String value = formatter.formatCellValue(cell, evaluator);
...