Author: fanningpj
Date: Tue Oct 29 18:18:12 2024
New Revision: 1921651
URL: http://svn.apache.org/viewvc?rev=1921651&view=rev
Log:
[bug-69418] Issue when evaluating WORKDAY function that has a cell ref as 2nd
param
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/LazyRefEval.java
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/eval/OperandResolver.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWorkdayFunc.java
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/LazyRefEval.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/LazyRefEval.java?rev=1921651&r1=1921650&r2=1921651&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/LazyRefEval.java
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/LazyRefEval.java Tue
Oct 29 18:18:12 2024
@@ -39,6 +39,14 @@ public final class LazyRefEval extends R
return _evaluator.getEvalForCell(sheetIndex, getRow(), getColumn());
}
+ /**
+ * @return the Eval of the first sheet associated with this LazyRefEval
+ * @since POI 5.3.1
+ */
+ public ValueEval getInnerValueEvalForFirstSheet() {
+ return _evaluator.getEvalForCell(_evaluator.getFirstSheetIndex(),
getRow(), getColumn());
+ }
+
public AreaEval offset(int relFirstRowIx, int relLastRowIx, int
relFirstColIx, int relLastColIx) {
AreaI area = new OffsetArea(getRow(), getColumn(),
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/eval/OperandResolver.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/eval/OperandResolver.java?rev=1921651&r1=1921650&r2=1921651&view=diff
==============================================================================
---
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/eval/OperandResolver.java
(original)
+++
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/eval/OperandResolver.java
Tue Oct 29 18:18:12 2024
@@ -18,6 +18,7 @@
package org.apache.poi.ss.formula.eval;
import org.apache.poi.ss.formula.EvaluationCell;
+import org.apache.poi.ss.formula.LazyRefEval;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.util.CellRangeAddress;
@@ -267,6 +268,14 @@ public final class OperandResolver {
}
return dd;
}
+ if (ev instanceof LazyRefEval) {
+ final LazyRefEval lre = (LazyRefEval) ev;
+ final ValueEval innerValueEval =
lre.getInnerValueEvalForFirstSheet();
+ if (innerValueEval == ev) {
+ throw new IllegalStateException("Circular lazy reference " +
lre);
+ }
+ return coerceValueToDouble(innerValueEval);
+ }
throw new IllegalStateException("Unexpected arg eval type (" +
ev.getClass().getName() + ")");
}
Modified:
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWorkdayFunc.java
URL:
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWorkdayFunc.java?rev=1921651&r1=1921650&r2=1921651&view=diff
==============================================================================
---
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWorkdayFunc.java
(original)
+++
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestWorkdayFunc.java
Tue Oct 29 18:18:12 2024
@@ -46,7 +46,7 @@ class TestWorkdayFunc {
cellB1.setCellValue(5);
Cell cellResult = sheet.createRow(1).createCell(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
- assertDouble(fe, cellResult, "WORKDAY(A1,5)",
DateUtil.getExcelDate(LocalDate.parse("2024-11-05")));
+ assertDouble(fe, cellResult, "WORKDAY(A1,B1)",
DateUtil.getExcelDate(LocalDate.parse("2024-11-05")));
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]