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/24 16:56:24 UTC
svn commit: r1613154 - in /poi/trunk/src:
java/org/apache/poi/ss/formula/OperationEvaluationContext.java
ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
Author: nick
Date: Thu Jul 24 14:56:23 2014
New Revision: 1613154
URL: http://svn.apache.org/r1613154
Log:
When evaluating a name in another workbook, need to use an OperationEvaluationContext tied to that Workbook, and do so such that XSSF references work too
Modified:
poi/trunk/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java?rev=1613154&r1=1613153&r2=1613154&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java Thu Jul 24 14:56:23 2014
@@ -377,25 +377,31 @@ public final class OperationEvaluationCo
private ValueEval getExternalNameXEval(ExternalName externName, String workbookName) {
try {
+ // Fetch the workbook this refers to, and the name as defined with that
WorkbookEvaluator refWorkbookEvaluator = _bookEvaluator.getOtherWorkbookEvaluator(workbookName);
EvaluationName evaluationName = refWorkbookEvaluator.getName(externName.getName(),externName.getIx()-1);
if (evaluationName != null && evaluationName.hasFormula()){
if (evaluationName.getNameDefinition().length > 1) {
throw new RuntimeException("Complex name formulas not supported yet");
}
+
+ // Need to evaluate the reference in the context of the other book
+ OperationEvaluationContext refWorkbookContext = new OperationEvaluationContext(
+ refWorkbookEvaluator, refWorkbookEvaluator.getWorkbook(), -1, -1, -1, _tracker);
+
Ptg ptg = evaluationName.getNameDefinition()[0];
if (ptg instanceof Ref3DPtg){
Ref3DPtg ref3D = (Ref3DPtg)ptg;
- int sheetIndex = refWorkbookEvaluator.getSheetIndexByExternIndex(ref3D.getExternSheetIndex());
- String sheetName = refWorkbookEvaluator.getSheetName(sheetIndex);
- SheetRefEvaluator sre = createExternSheetRefEvaluator(workbookName, sheetName);
- return new LazyRefEval(ref3D.getRow(), ref3D.getColumn(), sre);
+ return refWorkbookContext.getRef3DEval(ref3D);
+ } else if (ptg instanceof Ref3DPxg){
+ Ref3DPxg ref3D = (Ref3DPxg)ptg;
+ return refWorkbookContext.getRef3DEval(ref3D);
} else if(ptg instanceof Area3DPtg){
Area3DPtg area3D = (Area3DPtg)ptg;
- int sheetIndex = refWorkbookEvaluator.getSheetIndexByExternIndex(area3D.getExternSheetIndex());
- String sheetName = refWorkbookEvaluator.getSheetName(sheetIndex);
- SheetRefEvaluator sre = createExternSheetRefEvaluator(workbookName, sheetName);
- return new LazyAreaEval(area3D.getFirstRow(), area3D.getFirstColumn(), area3D.getLastRow(), area3D.getLastColumn(), sre);
+ return refWorkbookContext.getArea3DEval(area3D);
+ } else if(ptg instanceof Area3DPxg){
+ Area3DPxg area3D = (Area3DPxg)ptg;
+ return refWorkbookContext.getArea3DEval(area3D);
}
}
return ErrorEval.REF_INVALID;
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java?rev=1613154&r1=1613153&r2=1613154&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFormulaEvaluation.java Thu Jul 24 14:56:23 2014
@@ -156,9 +156,8 @@ public final class TestXSSFFormulaEvalua
// Evaluate and check results
assertEquals("\"Hello!\"", evaluator.evaluate(cXSLX_cell).formatAsString());
- // TODO Fix XSSF reference evaluations to work
-// assertEquals("\"Test A1\"", evaluator.evaluate(cXSLX_sNR).formatAsString());
-// assertEquals("142.0", evaluator.evaluate(cXSLX_gNR).formatAsString());
+ assertEquals("\"Test A1\"", evaluator.evaluate(cXSLX_sNR).formatAsString());
+ assertEquals("142.0", evaluator.evaluate(cXSLX_gNR).formatAsString());
assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell).formatAsString());
assertEquals("\"Test A1\"", evaluator.evaluate(cXSL_sNR).formatAsString());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org