Class MultiOperandNumericFunction
- java.lang.Object
-
- org.apache.poi.ss.formula.functions.MultiOperandNumericFunction
-
- All Implemented Interfaces:
Function
- Direct Known Subclasses:
AggregateFunction
,MatrixFunction.MutableValueCollector
,MinaMaxa
,Mirr
public abstract class MultiOperandNumericFunction extends Object implements Function
This is the super class for all excel function evaluator classes that take variable number of operands, and where the order of operands does not matter
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MultiOperandNumericFunction.Policy
-
Constructor Summary
Constructors Modifier Constructor Description protected
MultiOperandNumericFunction(boolean isReferenceBoolCounted, boolean isBlankCounted, boolean isFilterCounted)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract double
evaluate(double[] values)
ValueEval
evaluate(ValueEval[] args, int srcCellRow, int srcCellCol)
protected int
getMaxNumOperands()
Maximum number of operands accepted by this function.protected double[]
getNumberArray(ValueEval[] operands)
Returns a double array that contains values for the numeric cells from among the list of operands.boolean
isHiddenRowCounted()
boolean
isSubtotalCounted()
Whether to count nested subtotals.void
setBlankEvalPolicy(MultiOperandNumericFunction.Policy policy)
void
setMissingArgPolicy(MultiOperandNumericFunction.Policy policy)
protected boolean
treatStringsAsZero()
Functions like AVERAGEA() differ from AVERAGE() in the way they handle non-numeric cells.
-
-
-
Method Detail
-
setMissingArgPolicy
public void setMissingArgPolicy(MultiOperandNumericFunction.Policy policy)
-
setBlankEvalPolicy
public void setBlankEvalPolicy(MultiOperandNumericFunction.Policy policy)
-
treatStringsAsZero
protected boolean treatStringsAsZero()
Functions like AVERAGEA() differ from AVERAGE() in the way they handle non-numeric cells. AVERAGEA treats booleans as 1.0 (true) and 0.0 (false). String cells are treated as 0.0 (AVERAGE() ignores the cell altogether).- Returns:
- whether to parse non-numeric cells
-
evaluate
public final ValueEval evaluate(ValueEval[] args, int srcCellRow, int srcCellCol)
- Specified by:
evaluate
in interfaceFunction
- Parameters:
args
- the evaluated function arguments. Empty values are represented withBlankEval
orMissingArgEval
, nevernull
.srcCellRow
- row index of the cell containing the formula under evaluationsrcCellCol
- column index of the cell containing the formula under evaluation- Returns:
- The evaluated result, possibly an
ErrorEval
, nevernull
. Note - Excel uses the error code #NUM! instead of IEEE NaN, so when numeric functions evaluate toDouble.NaN
be sure to translate the result toErrorEval.NUM_ERROR
.
-
evaluate
protected abstract double evaluate(double[] values) throws EvaluationException
- Throws:
EvaluationException
-
getMaxNumOperands
protected int getMaxNumOperands()
Maximum number of operands accepted by this function. Subclasses may override to change default value.
-
getNumberArray
protected final double[] getNumberArray(ValueEval[] operands) throws EvaluationException
Returns a double array that contains values for the numeric cells from among the list of operands. Blanks and Blank equivalent cells are ignored. Error operands or cells containing operands of type that are considered invalid and would result in #VALUE! error in excel cause this function to returnnull
.- Returns:
- never
null
- Throws:
EvaluationException
-
isSubtotalCounted
public boolean isSubtotalCounted()
Whether to count nested subtotals.
-
isHiddenRowCounted
public boolean isHiddenRowCounted()
- Returns:
- true if values in hidden rows are counted
- See Also:
Subtotal
-
-