Class DataValidationEvaluator


  • public class DataValidationEvaluator
    extends java.lang.Object
    Evaluates Data Validation constraints.

    For performance reasons, this class keeps a cache of all previously retrieved DataValidation instances. Be sure to call clearAllCachedValues() if any workbook validation definitions are added, modified, or deleted.

    Changing cell values should be fine, as long as the corresponding WorkbookEvaluator.clearAllCachedResultValues() is called as well.

    • Constructor Detail

      • DataValidationEvaluator

        public DataValidationEvaluator​(Workbook wb,
                                       WorkbookEvaluatorProvider provider)
        Use the same formula evaluation context used for other operations, so cell value changes are automatically noticed
        Parameters:
        wb - the workbook this operates on
        provider - provider for formula evaluation
    • Method Detail

      • clearAllCachedValues

        public void clearAllCachedValues()
        Call this whenever validation structures change, so future results stay in sync with the Workbook state.
      • getValidationForCell

        public DataValidation getValidationForCell​(CellReference cell)
        Finds and returns the DataValidation for the cell, if there is one. Lookup is based on the first match from DataValidation.getRegions() for the cell's sheet. DataValidation regions must be in the same sheet as the DataValidation. Allowed values expressions may reference other sheets, however.
        Parameters:
        cell - reference to check - use this in case the cell does not actually exist yet
        Returns:
        the DataValidation applicable to the given cell, or null if no validation applies
      • getValidationValuesForCell

        public java.util.List<ValueEval> getValidationValuesForCell​(CellReference cell)
        If getValidationForCell(CellReference) returns an instance, and the DataValidationConstraint.ValidationType is DataValidationConstraint.ValidationType.LIST, return the valid values, whether they are from a static list or cell range.

        For all other validation types, or no validation at all, this method returns null.

        This method could throw an exception if the validation type is not LIST, but since this method is mostly useful in UI contexts, null seems the easier path.

        Parameters:
        cell - reference to check - use this in case the cell does not actually exist yet
        Returns:
        returns an unmodifiable List of ValueEvals if applicable, or null
      • isValidCell

        public boolean isValidCell​(CellReference cellRef)
        Use the validation returned by getValidationForCell(CellReference) if you want the error display details. This is the validation checked by this method, which attempts to replicate Excel's data validation rules.

        Note that to properly apply some validations, care must be taken to offset the base validation formula by the relative position of the current cell, or the wrong value is checked.

        Parameters:
        cellRef - The reference of the cell to evaluate
        Returns:
        true if the cell has no validation or the cell value passes the defined validation, false if it fails
      • isType

        public static boolean isType​(Cell cell,
                                     CellType type)
        Note that this assumes the cell cached value is up to date and in sync with data edits
        Parameters:
        cell - The Cell to check.
        type - The CellType to check for.
        Returns:
        true if the cell or cached cell formula result type match the given type