https://bz.apache.org/bugzilla/show_bug.cgi?id=68258
Bug ID: 68258
Summary: Nested functions in IF formulas don't get evaluated
Product: POI
Version: unspecified
Hardware: PC
Status: NEW
Severity: normal
Priority: P2
Component: XSSF
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
Created attachment 39419
--> https://bz.apache.org/bugzilla/attachment.cgi?id=39419&action=edit
Spreadsheet with nested IF formulas
I'm facing a problem that seems similar to bugs 55747 and 55324. In particular,
I'm trying to set values for a few cells in the attached Spreadsheet and then
evaluate all formulas in the worksheet. All formula results come back as
"#VALUE!". When I set the "setForceFormulaRecalculation" flag to TRUE, upon
opening the saved Spreadsheet, Excel evaluates everything properly.
Relevant information:
Scala version 2.13.8
Java runtime: openjdk version "1.8.0_362" 64 bit
org.apache.poi.poi version 5.2.5 (also reproduced in 5.2.4 and 5.2.2)
org.apache.poi.poi-ooxml version 5.2.5 (also reproduced in 5.2.4 and 5.2.2)
I'm trying to set values for the following cells:
Loan amount - E3
Annual interest rate - E4
Loan period in years - E5
Number of payments per year - E6
Start date of loan - E7
Optional extra payments - E9
And I want to read back the results after computing all formulas for the
following cells:
Scheduled payment - I3
Scheduled number of payments - I4
Actual number of payments - I5
Total early payments - I6
Total interest - I7
LENDER NAME - "LenderName"
Note that reading the "LenderName" cell value works just fine.
What I've tried in terms of evaluation:
val wb = XSSFWorkbookFactory.createWorkbook(pkg)
Method 1:
1. Set all desired cell values in wb
2. Evaluate all formulas after all values have been set:
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb)
Method 2:
1. Create a single evaluator for the wb: val evaluator =
wb.getCreationHelper.createFormulaEvaluator
2. Set all desired cell values in wb
3. Evaluate all formulas after all values have been set: evaluator.evaluateAll
Method 3:
1. Create a single evaluator for the wb: val evaluator =
wb.getCreationHelper.createFormulaEvaluator
2. Set all desired cell values in wb
3. For each cell after setting its value, call notifyUpdateCell
4. Evaluate all formulas after all values have been set: evaluator.evaluateAll
Method 4:
1. Create a single evaluator for the wb: val evaluator =
wb.getCreationHelper.createFormulaEvaluator
2. Set all desired cell values in wb
3. For each cell after setting its value, call notifySetFormula
4. Evaluate all formulas after all values have been set: evaluator.evaluateAll
Method 5:
1. Set all desired cell values in wb
2. For each cell after setting its value, call notifyUpdateCell
3. Evaluate all formulas after all values have been set:
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb)
Method 6:
1. Set all desired cell values in wb
2. For each cell after setting its value, call notifySetFormula
3. Evaluate all formulas after all values have been set:
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb)
Note that I'm always setting wb.setForceFormulaRecalculation(true) before
evaluating all formulas (in case it matters)
I think I've tried all possible combinations this might work as indicated in
the documentation. I've even tried using evaluator.evaluateInCell as an
extension of methods 3, 4, 5 and 6 whenever setting the value for a cell, just
in case (I've tried both creating a new evaluator for every cell, or re-using
the same one), but nothing worked.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]