public final class OperandResolver
extends java.lang.Object
Modifier and Type | Method and Description |
---|---|
static ValueEval |
chooseSingleElementFromArea(AreaEval ae,
int srcCellRow,
int srcCellCol)
Implements (some perhaps not well known) Excel functionality to select a single cell from an
area depending on the coordinates of the calling cell.
|
static java.lang.Boolean |
coerceValueToBoolean(ValueEval ve,
boolean stringsAreBlanks) |
static double |
coerceValueToDouble(ValueEval ev)
Applies some conversion rules if the supplied value is not already a number.
|
static int |
coerceValueToInt(ValueEval ev)
Applies some conversion rules if the supplied value is not already an integer.
Value is first coerced to a double ( See coerceValueToDouble() ). |
static java.lang.String |
coerceValueToString(ValueEval ve) |
static ValueEval |
getElementFromArray(AreaEval ae,
EvaluationCell cell)
Retrieves a single value from an area evaluation utilizing the 2D indices of the cell
within its own area reference to index the value in the area evaluation.
|
static ValueEval |
getSingleValue(ValueEval arg,
int srcCellRow,
int srcCellCol)
Retrieves a single value from a variety of different argument types according to standard
Excel rules.
|
static java.lang.Double |
parseDateTime(java.lang.String pText) |
static java.lang.Double |
parseDouble(java.lang.String pText)
Converts a string to a double using standard rules that Excel would use.
Tolerates leading and trailing spaces, |
public static ValueEval getSingleValue(ValueEval arg, int srcCellRow, int srcCellCol) throws EvaluationException
arg
- the evaluated argument as passed to the function or operator.srcCellRow
- used when arg is a single column AreaRefsrcCellCol
- used when arg is a single row AreaRefnull
or ErrorEval.EvaluationException
- if srcCellRow or srcCellCol do not properly index into
an AreaEval. If the actual value retrieved is an ErrorEval, a corresponding
EvaluationException is thrown.public static ValueEval getElementFromArray(AreaEval ae, EvaluationCell cell)
ae
- area reference after evaluationcell
- the source cell of the formula that contains its 2D indicesnull
.public static ValueEval chooseSingleElementFromArea(AreaEval ae, int srcCellRow, int srcCellCol) throws EvaluationException
A | B | C | D | |
---|---|---|---|---|
1 | 15 | 20 | 25 | |
2 | 200 | |||
3 | 300 | |||
3 | 400 |
A | B | C | D | |
---|---|---|---|---|
1 | 15 | 20 | 25 | |
2 | 1215 | 1220 | #VALUE! | 200 |
3 | 1315 | 1320 | #VALUE! | 300 |
4 | #VALUE! | #VALUE! | #VALUE! | 400 |
The same concept is extended to references across sheets, such that even multi-row, multi-column areas can be useful.
Of course with carefully (or carelessly) chosen parameters, cyclic references can occur and
hence this method can throw a 'circular reference' EvaluationException. Note that
this method does not attempt to detect cycles. Every cell in the specified Area ae
has already been evaluated prior to this method call. Any cell (or cells) part of
ae that would incur a cyclic reference error if selected by this method, will
already have the value
null
. Never
ErrorEval.EvaluationException
- if there is a problem with indexing into the area, or if the
evaluated cell has an error.public static int coerceValueToInt(ValueEval ev) throws EvaluationException
0
.
Excel typically converts doubles to integers by truncating toward negative infinity.
The equivalent java code is:
return (int)Math.floor(d);
not:
return (int)d; // wrong - rounds toward zero
EvaluationException
public static double coerceValueToDouble(ValueEval ev) throws EvaluationException
NumberEval.ZERO
.ev
- must be a NumberEval
, StringEval
, BoolEval
or
BlankEval
EvaluationException
- if a StringEval is supplied and cannot be parsed
as a double (See parseDouble() for allowable formats).java.lang.RuntimeException
- if the supplied parameter is not NumberEval
,
StringEval
, BoolEval
or BlankEval
public static java.lang.Double parseDouble(java.lang.String pText)
Doesn't support currency prefixes, commas, percentage signs or arithmetic operations strings.
Some examples:
" 123 " -> 123.0
".123" -> 0.123
"1E4" -> 1000
"-123" -> -123.0
These not supported yet:
" $ 1,000.00 " -> 1000.0
"$1.25E4" -> 12500.0
"5**2" -> 500
"250%" -> 2.5
null
if the specified text cannot be parsed as a numberpublic static java.lang.Double parseDateTime(java.lang.String pText)
public static java.lang.String coerceValueToString(ValueEval ve)
ve
- must be a NumberEval, StringEval, BoolEval, or BlankEvalnull
public static java.lang.Boolean coerceValueToBoolean(ValueEval ve, boolean stringsAreBlanks) throws EvaluationException
null
to represent blank valuesEvaluationException
- if ve is an ErrorEval, or if a string value cannot be convertedCopyright 2021 The Apache Software Foundation or its licensors, as applicable.