mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
Fix bug 64238: Make LOOKUP functions deal with empty last arg correctly
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1882827 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
19944379e1
commit
352f5a034c
@ -25,6 +25,7 @@ import org.apache.poi.ss.formula.eval.BlankEval;
|
||||
import org.apache.poi.ss.formula.eval.BoolEval;
|
||||
import org.apache.poi.ss.formula.eval.ErrorEval;
|
||||
import org.apache.poi.ss.formula.eval.EvaluationException;
|
||||
import org.apache.poi.ss.formula.eval.MissingArgEval;
|
||||
import org.apache.poi.ss.formula.eval.NumberEval;
|
||||
import org.apache.poi.ss.formula.eval.NumericValueEval;
|
||||
import org.apache.poi.ss.formula.eval.OperandResolver;
|
||||
@ -133,7 +134,7 @@ final class LookupUtils {
|
||||
return new ColumnVector(tableArray, relativeColumnIndex);
|
||||
}
|
||||
/**
|
||||
* @return <code>null</code> if the supplied area is neither a single row nor a single colum
|
||||
* @return <code>null</code> if the supplied area is neither a single row nor a single column
|
||||
*/
|
||||
public static ValueVector createVector(TwoDEval ae) {
|
||||
if (ae.isColumn()) {
|
||||
@ -144,7 +145,7 @@ final class LookupUtils {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public static ValueVector createVector(RefEval re) {
|
||||
return new SheetVector(re);
|
||||
}
|
||||
@ -276,11 +277,11 @@ final class LookupUtils {
|
||||
|
||||
|
||||
private static final class StringLookupComparer extends LookupValueComparerBase {
|
||||
|
||||
private String _value;
|
||||
|
||||
private final String _value;
|
||||
private final Pattern _wildCardPattern;
|
||||
private boolean _matchExact;
|
||||
private boolean _isMatchFunction;
|
||||
private final boolean _matchExact;
|
||||
private final boolean _isMatchFunction;
|
||||
|
||||
protected StringLookupComparer(StringEval se, boolean matchExact, boolean isMatchFunction) {
|
||||
super(se);
|
||||
@ -311,7 +312,7 @@ final class LookupUtils {
|
||||
}
|
||||
}
|
||||
private static final class NumberLookupComparer extends LookupValueComparerBase {
|
||||
private double _value;
|
||||
private final double _value;
|
||||
|
||||
protected NumberLookupComparer(NumberEval ne) {
|
||||
super(ne);
|
||||
@ -326,7 +327,7 @@ final class LookupUtils {
|
||||
}
|
||||
}
|
||||
private static final class BooleanLookupComparer extends LookupValueComparerBase {
|
||||
private boolean _value;
|
||||
private final boolean _value;
|
||||
|
||||
protected BooleanLookupComparer(BoolEval be) {
|
||||
super(be);
|
||||
@ -434,6 +435,11 @@ final class LookupUtils {
|
||||
public static boolean resolveRangeLookupArg(ValueEval rangeLookupArg, int srcCellRow, int srcCellCol) throws EvaluationException {
|
||||
|
||||
ValueEval valEval = OperandResolver.getSingleValue(rangeLookupArg, srcCellRow, srcCellCol);
|
||||
if(valEval == MissingArgEval.instance) {
|
||||
// Tricky:
|
||||
// forth arg exists but is not supplied: "=VLOOKUP(A1,A2:A4,2,)"
|
||||
return false;
|
||||
}
|
||||
if(valEval instanceof BlankEval) {
|
||||
// Tricky:
|
||||
// fourth arg supplied but evaluates to blank
|
||||
@ -457,7 +463,7 @@ final class LookupUtils {
|
||||
Boolean b = Countif.parseBoolean(stringValue);
|
||||
if(b != null) {
|
||||
// string converted to boolean OK
|
||||
return b.booleanValue();
|
||||
return b;
|
||||
}
|
||||
// Even more trickiness:
|
||||
// Note - even if the StringEval represents a number value (for example "1"),
|
||||
|
||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user