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]

Reply via email to