Я столкнулся со следующей проблемой:
Всякий раз, когда я пытаюсь оценить формулу SXSSFCell внутри SXSSFWorkbook, он вычисляет ее должным образом, НО, если для CellType установлено значение «String», конец, таким образом, удаляет формулу, которая ранее была сохранена в нем.
Я попробовал классический способ:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateAll();
Специфичная для ячейки:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.evaluateFormulaCell(cell);
И даже так:
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue cv = evaluator.evaluate(cell);
cell.setCellValue(new XSSFRichTextString(cv.getStringValue()));
Но каждый раз для CellType моего объекта ячейки устанавливается значение String.
С другой стороны, у меня нет проблем при использовании XSSFCell
в XSSFWorkbook
. Запуск одного из приведенных выше примеров работает отлично. Формула рассчитывается, а CellType
по-прежнему "Формула"
И когда я читаю исходный код, оба SXSSFFormulaEvaluator
и XSSFFormulaEvaluator
расширяют BaseFormulaEvaluator
, и эта функция evaluateFormulaCell
говорит: «Ячейка остается ячейкой формулы» (и это не относится к любым SXSSFCell
)
После небольшого копания я обнаружил, что метод setCellValue
отличается между классом SXSSFCell
и XSSFCell
, и именно поэтому это происходит.
Мне кажется, что это ошибка, которая никогда не была устранена, но если у кого-то есть идея, как решить эту проблему, это было бы замечательно.