Пересчет формул в электронной таблице с помощью Apache POI
-
27-10-2019 - |
Вопрос
Я пытаюсь использовать POI XSSF для оценки некоторых формул Excel. Значения не нужно сохранять, и мне, возможно, придется вычислять много формул, поэтому я пытаюсь сделать все это в одной ячейке.
Проблема в том, что значение ячейки застревает в первой введенной формуле даже после того, как я пересчитал
родовое словоЭто выводит 40822.0 40822.0 (эквивалент в Excel от 06.10.2011) оба раза вместо повторной оценки по новой формуле.
Решение
Если вы используете формулу FormulaEvaluator более одного раза, вам понадобится эта строка между использованиями, иначе она будет использовать один и тот же результат каждый раз.
родовое словоДругие советы
FormulaEvaluator кэширует вычисленные значения ячеек для ускорения обработки.Если вы выполняете обновления ячеек после создания оценщика, вам необходимо сообщить об этом!
Дополнительную информацию см. в документации FormulaEvaluator .Детали.В вашем случае попробуйте:
родовое словоДля выполнения работы вы можете выполнить следующие действия.Это два решения, из которых вы можете использовать любую функцию.Он оценивает всю книгу, поэтому любая используемая вами формула будет оценена.Надеюсь, это поможет.
1) evalator.evaluateAll (); 2) XSSFFormulaEvaluator.evaluateAllFormulaCells (wb);