You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2020/10/25 07:21:46 UTC

svn commit: r1882827 - in /poi/trunk: src/java/org/apache/poi/ss/formula/functions/LookupUtils.java test-data/spreadsheet/LookupFunctionsTestCaseData.xls

Author: centic
Date: Sun Oct 25 07:21:45 2020
New Revision: 1882827

URL: http://svn.apache.org/viewvc?rev=1882827&view=rev
Log:
Fix bug 64238: Make LOOKUP functions deal with empty last arg correctly

Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/functions/LookupUtils.java
    poi/trunk/test-data/spreadsheet/LookupFunctionsTestCaseData.xls

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/functions/LookupUtils.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/LookupUtils.java?rev=1882827&r1=1882826&r2=1882827&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/LookupUtils.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/LookupUtils.java Sun Oct 25 07:21:45 2020
@@ -25,6 +25,7 @@ import org.apache.poi.ss.formula.eval.Bl
 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"),

Modified: poi/trunk/test-data/spreadsheet/LookupFunctionsTestCaseData.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/LookupFunctionsTestCaseData.xls?rev=1882827&r1=1882826&r2=1882827&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org