Apache POI: формула удаляется при чтении значения ячейки с помощью формулы FormulaEvaluator - PullRequest
1 голос
/ 28 февраля 2020

Я использую poi версии 3.17. В моем коде java я хочу прочитать значение ячейки, которое имеет формулу, и я использую функцию evaluateInCell, равную FormulaEvaluator, для определения значения ячейки.

У меня есть шаблон excel в моем ресурсе, в котором ячейки имеют формулы, если я создаю из этого книгу и задаю какое-то значение, и пытаюсь прочитать ее обратно, FormulaEvaluator разрешает ячейку и помещает фактическую значение, по этой формуле эти ячейки заменяются и обновляются с фактическим значением. ПОЧЕМУ ??

Я видел реализацию функции evaluateInCell, которая намеренно устанавливает тип ячейки как setCellType(cell, cv);

public XSSFCell evaluateInCell(Cell cell) {
        if (cell == null) {
            return null;
        } else {
            XSSFCell result = (XSSFCell)cell;
            if (cell.getCellType() == 2) {
                CellValue cv = this.evaluateFormulaCellValue(cell);
                setCellType(cell, cv);
                setCellValue(cell, cv);
            }
            return result;
        }
    }

Почему библиотека делает это, и удаляет фактическую формулу из клетка.

1 Ответ

0 голосов
/ 06 марта 2020

Существуют различные функции:

 CellType evaluateFormulaCell(Cell cell) - your cell will hold both the formula, and the result.       
 Cell evaluateInCell(Cell cell) - you cell will contain result only, formula is erased.      
 CellValue evaluate(Cell cell) - the formula is evaluated and returned. No changes in the cell.    
 void evaluateAll() = mass evaluateFormulaCell for the whole book.

Очевидно, вы взяли evaluateInCell для evaluateFormulaCell. evaluateInCell очень полезно, и не только для подсчета - используйте его для чистого стирания формул.

Также не забудьте clearAllCachedResultValues() или notifyUpdateCell() / notifySetFormula(). Без этого любая оценка после любых изменений на листе может потерпеть неудачу.

...