You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2014/07/19 23:27:28 UTC

svn commit: r1611969 - in /poi/trunk/src: java/org/apache/poi/ss/formula/WorkbookEvaluator.java java/org/apache/poi/ss/formula/eval/NameXEval.java ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java

Author: nick
Date: Sat Jul 19 21:27:28 2014
New Revision: 1611969

URL: http://svn.apache.org/r1611969
Log:
Better reporting on why a test is failing, and partial NameXPxg eval

Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java
    poi/trunk/src/java/org/apache/poi/ss/formula/eval/NameXEval.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java?rev=1611969&r1=1611968&r2=1611969&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/WorkbookEvaluator.java Sat Jul 19 21:27:28 2014
@@ -62,6 +62,7 @@ import org.apache.poi.ss.formula.ptg.Mem
 import org.apache.poi.ss.formula.ptg.MissingArgPtg;
 import org.apache.poi.ss.formula.ptg.NamePtg;
 import org.apache.poi.ss.formula.ptg.NameXPtg;
+import org.apache.poi.ss.formula.ptg.NameXPxg;
 import org.apache.poi.ss.formula.ptg.NumberPtg;
 import org.apache.poi.ss.formula.ptg.OperationPtg;
 import org.apache.poi.ss.formula.ptg.Ptg;
@@ -650,6 +651,25 @@ public final class WorkbookEvaluator {
                return eval;
            }
        }
+       if (ptg instanceof NameXPxg) {
+           // TODO This is a temporary hack....
+           NameXPxg pxg = (NameXPxg)ptg;
+           int sIdx = -1;
+           if (pxg.getSheetName() != null) {
+               sIdx = _workbook.getSheetIndex(pxg.getSheetName());
+           }
+           EvaluationName evalName = _workbook.getName(pxg.getNameName(), sIdx);
+           if (evalName == null) {
+               // We don't know about that name, sorry
+               // TODO What about UDFs?
+               logInfo("Unknown Name referenced: " + pxg.getNameName());
+               return ErrorEval.NAME_INVALID;
+           }
+           
+           int nIdx = evalName.createPtg().getIndex();
+           NameXPtg nptg = new NameXPtg(sIdx, nIdx);
+           return getEvalForPtg(nptg, ec);
+       }
 
        if (ptg instanceof IntPtg) {
            return new NumberEval(((IntPtg)ptg).getValue());

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/eval/NameXEval.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/eval/NameXEval.java?rev=1611969&r1=1611968&r2=1611969&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/eval/NameXEval.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/eval/NameXEval.java Sat Jul 19 21:27:28 2014
@@ -20,10 +20,9 @@ package org.apache.poi.ss.formula.eval;
 import org.apache.poi.ss.formula.ptg.NameXPtg;
 
 /**
- * @author Josh Micich
+ * Evaluation of a Name defined in a Sheet or Workbook scope
  */
 public final class NameXEval implements ValueEval {
-
 	private final NameXPtg _ptg;
 
 	public NameXEval(NameXPtg ptg) {

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java?rev=1611969&r1=1611968&r2=1611969&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java Sat Jul 19 21:27:28 2014
@@ -266,6 +266,7 @@ public final class TestXSSFBugs extends 
     public void bug48539() throws Exception {
        XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48539.xlsx");
        assertEquals(3, wb.getNumberOfSheets());
+       assertEquals(0, wb.getNumberOfNames());
        
        // Try each cell individually
        XSSFFormulaEvaluator eval = new XSSFFormulaEvaluator(wb);
@@ -274,7 +275,14 @@ public final class TestXSSFBugs extends 
           for(Row r : s) {
              for(Cell c : r) {
                 if(c.getCellType() == Cell.CELL_TYPE_FORMULA) {
-                    CellValue cv = eval.evaluate(c);
+                    String formula = c.getCellFormula();
+                    CellValue cv;
+                    try {
+                        cv = eval.evaluate(c);
+                    } catch (Exception e) {
+                        throw new RuntimeException("Can't evaluate formula: " + formula, e);
+                    }
+                    
                     if(cv.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                         // assert that the calculated value agrees with
                         // the cached formula result calculated by Excel
@@ -1661,7 +1669,7 @@ public final class TestXSSFBugs extends 
      * org.apache.poi.ss.formula.FormulaParseException: Parse error near char 0 '[' in specified formula '[0]!NR_Global_B2'. Expected number, string, or defined name 
      */
     @Test
-    @Ignore
+    @Ignore("Bug 56737 remains outstanding to fix")
     public void bug56737() throws IOException {
         Workbook wb = XSSFTestDataSamples.openSampleWorkbook("56737.xlsx");
         



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