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: dev@poi.apache.org
          Reporter: spy...@neotalogic.com
  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: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to