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