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 2019/01/13 17:13:57 UTC

svn commit: r1851208 - in /poi/trunk: src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java test-data/spreadsheet/HsGetVal.xlsx

Author: centic
Date: Sun Jan 13 17:13:57 2019
New Revision: 1851208

URL: http://svn.apache.org/viewvc?rev=1851208&view=rev
Log:
Add reproducer for bug 60355

Added:
    poi/trunk/test-data/spreadsheet/HsGetVal.xlsx
Modified:
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java?rev=1851208&r1=1851207&r2=1851208&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestUnfixedBugs.java Sun Jan 13 17:13:57 2019
@@ -27,22 +27,30 @@ import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.Hashtable;
 
-import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.ss.formula.OperationEvaluationContext;
+import org.apache.poi.ss.formula.eval.NumberEval;
+import org.apache.poi.ss.formula.eval.ValueEval;
+import org.apache.poi.ss.formula.functions.FreeRefFunction;
+import org.apache.poi.ss.formula.udf.AggregatingUDFFinder;
+import org.apache.poi.ss.formula.udf.DefaultUDFFinder;
+import org.apache.poi.ss.formula.udf.UDFFinder;
 import org.apache.poi.ss.usermodel.BorderStyle;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
 import org.apache.poi.ss.usermodel.RichTextString;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellAddress;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellUtil;
 import org.apache.poi.ss.util.RegionUtil;
 import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.SXSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFTestDataSamples;
-import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.junit.Test;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
 
@@ -334,4 +342,52 @@ public final class TestUnfixedBugs {
         }
     }
 
+    @Test
+    public void testBug60355() throws IOException {
+        try (Workbook workbook = XSSFTestDataSamples.openSampleWorkbook("HsGetVal.xlsx")){
+
+            Sheet sheet = workbook.getSheetAt(workbook.getActiveSheetIndex());
+            System.out.println("cell_4_1 formula:" + sheet.getRow(4).getCell(1).getCellFormula());
+            System.out.println("cell_4_2 formula:" + sheet.getRow(4).getCell(2).getCellFormula());
+
+            // hard code HsGetValue test values for formulas on the sheet
+            Hashtable<CellAddress, String> cellToValueTable = new Hashtable<>();
+            CellAddress cell4_1 = new CellAddress(4, 1);
+            cellToValueTable.put(cell4_1, "678.0");
+            CellAddress cell4_2 = new CellAddress(4, 2);
+            cellToValueTable.put(cell4_2, "123.0");
+
+            String[] functionNames = {HsGetValue.name};
+            FreeRefFunction[] functionImpls = {new HsGetValue(cellToValueTable)};
+            UDFFinder udfs = new DefaultUDFFinder(functionNames, functionImpls);
+            UDFFinder udfToolpack = new AggregatingUDFFinder(udfs);
+            workbook.addToolPack(udfToolpack);
+
+            FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            formulaEvaluator.setIgnoreMissingWorkbooks(true);
+            formulaEvaluator.evaluateAll();
+        }
+    }
+
+    public class HsGetValue implements FreeRefFunction {
+        public static final String name = "HsGetValue";
+
+        private Hashtable<CellAddress, String> cellValues;
+
+        public HsGetValue(Hashtable<CellAddress, String> cellValues) {
+            super();
+            this.cellValues = cellValues;
+        }
+
+        @Override
+        public ValueEval evaluate(ValueEval[] args, OperationEvaluationContext evaluationContext) {
+            int row = evaluationContext.getRowIndex();
+            int column = evaluationContext.getColumnIndex();
+            CellAddress cell = new CellAddress(row, column);
+
+            String value = cellValues.get(cell);
+            return new NumberEval( Double.parseDouble(value) );
+        }
+
+    }
 }

Added: poi/trunk/test-data/spreadsheet/HsGetVal.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/HsGetVal.xlsx?rev=1851208&view=auto
==============================================================================
Binary files poi/trunk/test-data/spreadsheet/HsGetVal.xlsx (added) and poi/trunk/test-data/spreadsheet/HsGetVal.xlsx Sun Jan 13 17:13:57 2019 differ



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