]> source.dussan.org Git - poi.git/commitdiff
init support for XLOOKUP
authorPJ Fanning <fanningpj@apache.org>
Sun, 8 Aug 2021 14:53:41 +0000 (14:53 +0000)
committerPJ Fanning <fanningpj@apache.org>
Sun, 8 Aug 2021 14:53:41 +0000 (14:53 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1892115 13f79535-47bb-0310-9956-ffa450edef68

poi/src/main/java/org/apache/poi/ss/formula/atp/XLookupFunction.java
poi/src/test/java/org/apache/poi/ss/formula/atp/TestXLookupFunction.java

index 9dad4b88373ad091b5f5cc07f15f280992778534..940ec64fd0067f00e04771180aeb7eaf7fc7a256 100644 (file)
@@ -26,6 +26,9 @@ import java.util.Optional;
 /**
  * Implementation of Excel function XLOOKUP()
  *
+ * POI does not currently support have return values with multiple columns and just takes the first cell
+ * right now.
+ *
  * <b>Syntax</b><br>
  * <b>XLOOKUP</b>(<b>lookup_value</b>, <b>lookup_array</b>, <b>return_array</b>, <b>[if_not_found]</b>, <b>[match_mode]</b>, <b>[search_mode]</b>)<p>
  *
@@ -75,11 +78,9 @@ final class XLookupFunction implements FreeRefFunction {
             if (matchedRow != -1) {
                 if (returnEval instanceof AreaEval) {
                     AreaEval area = (AreaEval)returnEval;
-                    if (area.getWidth() == 1) {
-                        return area.getRelativeValue(matchedRow, 0);
-                    } else {
-                        return area.getRow(matchedRow);
-                    }
+                    //TODO to fully support XLOOKUP, we should return the full row
+                    //but POI does not currently support functions returning multiple cell values
+                    return area.getRelativeValue(matchedRow, 0);
                 }
             }
             if (notFound.isPresent()) {
index 133c0ffa7fa26075b60731b599cdf507abc5de7f..dbf11b7611419bea40b6b2153e86e017017e8956 100644 (file)
@@ -49,10 +49,7 @@ public class TestXLookupFunction {
         try (HSSFWorkbook wb = initWorkbook2()) {
             HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
             HSSFCell cell = wb.getSheetAt(0).getRow(0).createCell(100);
-            cell.setCellFormula("XLOOKUP(B2,B5:B14,C5:D14)");
-            fe.notifyUpdateCell(cell);
-            CellValue result = fe.evaluate(cell);
-            //TODO add assertions
+            assertString(fe, cell, "XLOOKUP(B2,B5:B14,C5:D14)", "Dianne Pugh");
         }
     }