mirror of https://github.com/apache/poi.git
[bug-69418] Issue when evaluating WORKDAY function that has a cell ref as 2nd param
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921651 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a185d08880
commit
7ea956189d
|
@ -39,6 +39,14 @@ public final class LazyRefEval extends RefEvalBase {
|
||||||
return _evaluator.getEvalForCell(sheetIndex, getRow(), getColumn());
|
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) {
|
public AreaEval offset(int relFirstRowIx, int relLastRowIx, int relFirstColIx, int relLastColIx) {
|
||||||
|
|
||||||
AreaI area = new OffsetArea(getRow(), getColumn(),
|
AreaI area = new OffsetArea(getRow(), getColumn(),
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
package org.apache.poi.ss.formula.eval;
|
package org.apache.poi.ss.formula.eval;
|
||||||
|
|
||||||
import org.apache.poi.ss.formula.EvaluationCell;
|
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.usermodel.DateUtil;
|
||||||
import org.apache.poi.ss.util.CellRangeAddress;
|
import org.apache.poi.ss.util.CellRangeAddress;
|
||||||
|
|
||||||
|
@ -267,6 +268,14 @@ public final class OperandResolver {
|
||||||
}
|
}
|
||||||
return dd;
|
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() + ")");
|
throw new IllegalStateException("Unexpected arg eval type (" + ev.getClass().getName() + ")");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ class TestWorkdayFunc {
|
||||||
cellB1.setCellValue(5);
|
cellB1.setCellValue(5);
|
||||||
Cell cellResult = sheet.createRow(1).createCell(0);
|
Cell cellResult = sheet.createRow(1).createCell(0);
|
||||||
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
|
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")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue