}
}
- private static ValueEval getValueFromArea(AreaEval ae, int pRowIx, int pColumnIx) throws EvaluationException {
+ private static ValueEval getValueFromArea(AreaEval ae, int rowIx, int columnIx) throws EvaluationException {
int width = ae.getWidth();
int height = ae.getHeight();
- int rowIx;
- int columnIx;
- if (ae.isRow() && pColumnIx == 0 && pRowIx > 0) {
- // TODO - explore all these special cases
- rowIx = 0;
- columnIx = pRowIx;
- } else {
- rowIx = pRowIx;
- columnIx = pColumnIx;
- }
// Slightly irregular logic for bounds checking errors
if (rowIx >= height || columnIx >= width) {
package org.apache.poi.hssf.record.formula.functions;
-import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.formula.eval.AreaEval;
import org.apache.poi.hssf.record.formula.eval.BlankEval;
import org.apache.poi.hssf.record.formula.eval.BoolEval;
if (lookupValue instanceof BlankEval) {
// blank eval can never be found in a lookup array
- //throw new EvaluationException(ErrorEval.NA);
- // TODO - investigate this
- return new NumberLookupComparer(NumberEval.ZERO);
+ throw new EvaluationException(ErrorEval.NA);
}
if (lookupValue instanceof StringEval) {
return new StringLookupComparer((StringEval) lookupValue);
AreaEval tableArray = LookupUtils.resolveTableArrayArg(args[1]);
boolean isRangeLookup = LookupUtils.resolveRangeLookupArg(arg3, srcCellRow, srcCellCol);
int rowIndex = LookupUtils.lookupIndexOfValue(lookupValue, LookupUtils.createColumnVector(tableArray, 0), isRangeLookup);
- ValueEval veColIndex;
- try {
- veColIndex = OperandResolver.getSingleValue(args[2], srcCellRow, srcCellCol);
- } catch (EvaluationException e) {
- // weird translation of errors for the third arg - needs investigation
- if (e.getErrorEval() == ErrorEval.NA) {
- return ErrorEval.REF_INVALID;
- }
- throw e;
- }
+ ValueEval veColIndex = OperandResolver.getSingleValue(args[2], srcCellRow, srcCellCol);
int colIndex = LookupUtils.resolveRowOrColIndexArg(veColIndex);
ValueVector resultCol = createResultColumnVector(tableArray, colIndex);
return resultCol.getItem(rowIndex);