in poi/src/main/java/org/apache/poi/ss/formula/EvaluationConditionalFormatRule.java [346:385]
private boolean checkValue(Cell cell, CellRangeAddress region) {
if (cell == null || DataValidationEvaluator.isType(cell, CellType.BLANK)
|| DataValidationEvaluator.isType(cell,CellType.ERROR)
|| (DataValidationEvaluator.isType(cell,CellType.STRING)
&& (cell.getStringCellValue() == null || cell.getStringCellValue().isEmpty())
)
) {
return false;
}
ValueEval eval = unwrapEval(workbookEvaluator.evaluate(rule.getFormula1(), ConditionalFormattingEvaluator.getRef(cell), region));
String f2 = rule.getFormula2();
ValueEval eval2 = BlankEval.instance;
if (f2 != null && f2.length() > 0) {
eval2 = unwrapEval(workbookEvaluator.evaluate(f2, ConditionalFormattingEvaluator.getRef(cell), region));
}
// we assume the cell has been evaluated, and the current formula value stored
if (DataValidationEvaluator.isType(cell, CellType.BOOLEAN)
&& (eval == BlankEval.instance || eval instanceof BoolEval)
&& (eval2 == BlankEval.instance || eval2 instanceof BoolEval)
) {
return operator.isValid(cell.getBooleanCellValue(), eval == BlankEval.instance ? null : ((BoolEval) eval).getBooleanValue(), eval2 == BlankEval.instance ? null : ((BoolEval) eval2).getBooleanValue());
}
if (DataValidationEvaluator.isType(cell, CellType.NUMERIC)
&& (eval == BlankEval.instance || eval instanceof NumberEval )
&& (eval2 == BlankEval.instance || eval2 instanceof NumberEval)
) {
return operator.isValid(cell.getNumericCellValue(), eval == BlankEval.instance ? null : ((NumberEval) eval).getNumberValue(), eval2 == BlankEval.instance ? null : ((NumberEval) eval2).getNumberValue());
}
if (DataValidationEvaluator.isType(cell, CellType.STRING)
&& (eval == BlankEval.instance || eval instanceof StringEval )
&& (eval2 == BlankEval.instance || eval2 instanceof StringEval)
) {
return operator.isValid(cell.getStringCellValue(), eval == BlankEval.instance ? null : ((StringEval) eval).getStringValue(), eval2 == BlankEval.instance ? null : ((StringEval) eval2).getStringValue());
}
return operator.isValidForIncompatibleTypes();
}