org.apache.poi.xssf.usermodel

## Class XSSFFormulaEvaluator

- java.lang.Object
- - org.apache.poi.ss.formula.BaseFormulaEvaluator
  - - org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator
    - - org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator

- All Implemented Interfaces:
    WorkbookEvaluatorProvider, FormulaEvaluator

      public final class XSSFFormulaEvaluator
      extends BaseXSSFFormulaEvaluator

  Evaluates formula cells.

  For performance reasons, this class keeps a cache of all previously calculated intermediate cell values. Be sure to call `BaseFormulaEvaluator.clearAllCachedResultValues()` if any workbook cells are changed between calls to evaluate~ methods on this class.

- - ### Field Summary

    - ### Fields inherited from class org.apache.poi.ss.formula.BaseFormulaEvaluator

      `_bookEvaluator`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `XSSFFormulaEvaluator(XSSFWorkbook workbook)`
    `protected` | `XSSFFormulaEvaluator(XSSFWorkbook workbook, WorkbookEvaluator bookEvaluator)`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `static XSSFFormulaEvaluator` | `create(XSSFWorkbook workbook, IStabilityClassifier stabilityClassifier, UDFFinder udfFinder)`
    `void` | `evaluateAll()` Loops over all cells in all sheets of the supplied workbook.
    `static void` | `evaluateAllFormulaCells(XSSFWorkbook wb)` Loops over all cells in all sheets of the supplied workbook.
    `XSSFCell` | `evaluateInCell(Cell cell)` If cell contains formula, it evaluates the formula, and puts the formula result back into the cell, in place of the old formula.
    `void` | `notifyDeleteCell(Cell cell)` Should be called to tell the cell value cache that the specified cell has just become a formula cell, or the formula text has changed
    `void` | `notifySetFormula(Cell cell)` Should be called to tell the cell value cache that the specified (value or formula) cell has changed.
    `void` | `notifyUpdateCell(Cell cell)` Should be called to tell the cell value cache that the specified (value or formula) cell has changed.
    `protected EvaluationCell` | `toEvaluationCell(Cell cell)` Turns a XSSFCell into a XSSFEvaluationCell

    - ### Methods inherited from class org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator

      `createRichTextString, evaluateFormulaCellValue, setCellType`

    - ### Methods inherited from class org.apache.poi.ss.formula.BaseFormulaEvaluator

      `_getWorkbookEvaluator, clearAllCachedResultValues, evaluate, evaluateAllFormulaCells, evaluateAllFormulaCells, evaluateFormulaCell, evaluateFormulaCellEnum, getEvaluationWorkbook, setCellType, setCellValue, setDebugEvaluationOutputForNextEval, setIgnoreMissingWorkbooks, setupEnvironment, setupReferencedWorkbooks`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### XSSFFormulaEvaluator

          public XSSFFormulaEvaluator(XSSFWorkbook workbook)

    - #### XSSFFormulaEvaluator

          protected XSSFFormulaEvaluator(XSSFWorkbook workbook,
                                         WorkbookEvaluator bookEvaluator)

  - ### Method Detail

    - #### create

          public static XSSFFormulaEvaluator create(XSSFWorkbook workbook,
                                                    IStabilityClassifier stabilityClassifier,
                                                    UDFFinder udfFinder)

      Parameters:
        `stabilityClassifier` - used to optimise caching performance. Pass `null` for the (conservative) assumption that any cell may have its definition changed after evaluation begins.
        `udfFinder` - pass `null` for default (AnalysisToolPak only)

    - #### notifySetFormula

          public void notifySetFormula(Cell cell)

      Description copied from interface: `FormulaEvaluator`
      Should be called to tell the cell value cache that the specified (value or formula) cell has changed. Failure to call this method after changing cell values will cause incorrect behaviour of the evaluate~ methods of this class

    - #### notifyDeleteCell

          public void notifyDeleteCell(Cell cell)

      Description copied from interface: `FormulaEvaluator`
      Should be called to tell the cell value cache that the specified cell has just become a formula cell, or the formula text has changed

    - #### notifyUpdateCell

          public void notifyUpdateCell(Cell cell)

      Description copied from interface: `FormulaEvaluator`
      Should be called to tell the cell value cache that the specified (value or formula) cell has changed. Failure to call this method after changing cell values will cause incorrect behaviour of the evaluate~ methods of this class

    - #### evaluateAllFormulaCells

          public static void evaluateAllFormulaCells(XSSFWorkbook wb)

      Loops over all cells in all sheets of the supplied workbook. For cells that contain formulas, their formulas are evaluated, and the results are saved. These cells remain as formula cells. For cells that do not contain formulas, no changes are made. This is a helpful wrapper around looping over all cells, and calling evaluateFormulaCell on each one.

    - #### evaluateInCell

          public XSSFCell evaluateInCell(Cell cell)

      Description copied from class: `BaseFormulaEvaluator`
      If cell contains formula, it evaluates the formula, and puts the formula result back into the cell, in place of the old formula. Else if cell does not contain formula, this method leaves the cell unchanged. Note that the same instance of `Cell` is returned to allow chained calls like:

           int evaluatedCellType = evaluator.evaluateInCell(cell).getCellType();

      Be aware that your cell value will be changed to hold the result of the formula. If you simply want the formula value computed for you, use `BaseFormulaEvaluator.evaluateFormulaCell(Cell)`}
      Specified by:
        `evaluateInCell` in interface `FormulaEvaluator`
      Overrides:
        `evaluateInCell` in class `BaseFormulaEvaluator`
      Parameters:
        `cell` - The `Cell` to evaluate and modify.
      Returns:
        the `cell` that was passed in, allowing for chained calls

    - #### evaluateAll

          public void evaluateAll()

      Loops over all cells in all sheets of the supplied workbook. For cells that contain formulas, their formulas are evaluated, and the results are saved. These cells remain as formula cells. For cells that do not contain formulas, no changes are made. This is a helpful wrapper around looping over all cells, and calling evaluateFormulaCell on each one.

    - #### toEvaluationCell

          protected EvaluationCell toEvaluationCell(Cell cell)

      Turns a XSSFCell into a XSSFEvaluationCell
      Specified by:
        `toEvaluationCell` in class `BaseXSSFFormulaEvaluator`

Copyright 2020 The Apache Software Foundation or its licensors, as applicable.