From 02f7b450d4ed94e011caddda6b15fae71d5e08c6 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Fri, 27 Jul 2018 21:26:31 +0000 Subject: [PATCH] [bug-62275] in vlooup function, treat optional 4th param as true if the value is not provided git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1836857 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/poi/ss/formula/functions/Vlookup.java | 7 ++++++- .../poi/xssf/usermodel/TestXSSFFormulaEvaluation.java | 7 ++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/java/org/apache/poi/ss/formula/functions/Vlookup.java b/src/java/org/apache/poi/ss/formula/functions/Vlookup.java index 5bdfeba036..a2daa856e4 100644 --- a/src/java/org/apache/poi/ss/formula/functions/Vlookup.java +++ b/src/java/org/apache/poi/ss/formula/functions/Vlookup.java @@ -52,7 +52,12 @@ public final class Vlookup extends Var3or4ArgFunction { // lookup_value , table_array, range_lookup, find lookup value, col_index, fetch result ValueEval lookupValue = OperandResolver.getSingleValue(lookup_value, srcRowIndex, srcColumnIndex); TwoDEval tableArray = LookupUtils.resolveTableArrayArg(table_array); - boolean isRangeLookup = LookupUtils.resolveRangeLookupArg(range_lookup, srcRowIndex, srcColumnIndex); + boolean isRangeLookup; + try { + isRangeLookup = LookupUtils.resolveRangeLookupArg(range_lookup, srcRowIndex, srcColumnIndex); + } catch(RuntimeException e) { + isRangeLookup = true; + } int rowIndex = LookupUtils.lookupIndexOfValue(lookupValue, LookupUtils.createColumnVector(tableArray, 0), isRangeLookup); int colIndex = LookupUtils.resolveRowOrColIndexArg(col_index, srcRowIndex, srcColumnIndex); ValueVector resultCol = createResultColumnVector(tableArray, colIndex); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java index cd10486626..f8f71686fa 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java @@ -437,16 +437,17 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator { assertEquals("D 0,068", evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1))); } + @Test public void testBug62275() throws IOException { try (Workbook wb = new XSSFWorkbook()) { Sheet sheet = wb.createSheet(); Row row = sheet.createRow(0); Cell cell = row.createCell(0); - cell.setCellFormula("vlookup(A2,B1:B5,2,)"); + cell.setCellFormula("vlookup(A2,B1:B5,2,true)"); - CreationHelper crateHelper = wb.getCreationHelper(); - FormulaEvaluator eval = crateHelper.createFormulaEvaluator(); + CreationHelper createHelper = wb.getCreationHelper(); + FormulaEvaluator eval = createHelper.createFormulaEvaluator(); eval.evaluate(cell); } } -- 2.39.5