Class DataValidationEvaluator
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
This class organizes and encapsulates all the pieces of information related to a single data validation configuration for a single cell.static enum
Not calling it OperatorType to avoid confusion for now with DataValidationConstraint.OperatorType.static enum
Not calling it ValidationType to avoid confusion for now with DataValidationConstraint.ValidationType. -
Constructor Summary
ConstructorsConstructorDescriptionDataValidationEvaluator
(Workbook wb, WorkbookEvaluatorProvider provider) Use the same formula evaluation context used for other operations, so cell value changes are automatically noticed -
Method Summary
Modifier and TypeMethodDescriptionvoid
Call this whenever validation structures change, so future results stay in sync with the Workbook state.Finds and returns theDataValidationEvaluator.DataValidationContext
for the cell, if there is one.Finds and returns theDataValidation
for the cell, if there is one.IfgetValidationForCell(CellReference)
returns an instance, and theDataValidationConstraint.ValidationType
isDataValidationConstraint.ValidationType.LIST
, return the valid values, whether they are from a static list or cell range.static so enums can reference it without creating a whole instanceprotected WorkbookEvaluator
static boolean
Note that this assumes the cell cached value is up to date and in sync with data editsboolean
isValidCell
(CellReference cellRef) Use the validation returned bygetValidationForCell(CellReference)
if you want the error display details.
-
Constructor Details
-
DataValidationEvaluator
Use the same formula evaluation context used for other operations, so cell value changes are automatically noticed- Parameters:
wb
- the workbook this operates onprovider
- provider for formula evaluation
-
-
Method Details
-
getWorkbookEvaluator
- Returns:
- evaluator
-
clearAllCachedValues
public void clearAllCachedValues()Call this whenever validation structures change, so future results stay in sync with the Workbook state. -
getValidationForCell
Finds and returns theDataValidation
for the cell, if there is one. Lookup is based on the first match fromDataValidation.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
-
getValidationContextForCell
public DataValidationEvaluator.DataValidationContext getValidationContextForCell(CellReference cell) Finds and returns theDataValidationEvaluator.DataValidationContext
for the cell, if there is one. Lookup is based on the first match fromDataValidation.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- Returns:
- the DataValidationContext applicable to the given cell, or null if no validation applies
-
getValidationValuesForCell
IfgetValidationForCell(CellReference)
returns an instance, and theDataValidationConstraint.ValidationType
isDataValidationConstraint.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.
-
getValidationValuesForConstraint
protected static List<ValueEval> getValidationValuesForConstraint(DataValidationEvaluator.DataValidationContext context) static so enums can reference it without creating a whole instance -
isValidCell
Use the validation returned bygetValidationForCell(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
Note that this assumes the cell cached value is up to date and in sync with data edits
-