(Using POI 3.13 final)
Here's your problem:
XSSFCell cell1 = row.createCell(0); //A1
XSSFCell cell2 = row.createCell(1); //B1
XSSFCell cell3 = row.createCell(2); //C1
XSSFCell cell4 = row.createCell(3); //D1
cell4.setCellFormula("IF(A1=1, A2, A3");
A2 and A3 are 0!
Also, just a note, you don't need to set the cell type before setting the
value. The cell type gets updated when you set the cell value.
Changing your formula to "IF(A1=1, B1, C1)", I get 3.0--which is better,
but still not correct. I still get 3.0 even if I change cell1 to 1.0
(numeric) and/or change the formula to IF(A1=1.0, B1, C1)
Here's my code (Jython)
from org.apache.poi.xssf.usermodel import XSSFWorkbook
wb = XSSFWorkbook()
row = wb.createSheet().createRow(0)
A1, B1, C1, D1 = [row.createCell(c) for c in range(4)]
A1.setCellValue("1")
B1.setCellValue(2.0)
C1.setCellValue(3.0)
D1.setCellFormula("IF(A1=1,B1,C1)")
evaluator = wb.getCreationHelper().createFormulaEvaluator()
evaluator.evaluateFormulaCell(D1); D1.getNumericCellValue() # returns 3.0
evaluator.evaluate(D1) returns org.apache.poi.ss.usermodel.CellValue [3.0]
e.evaluateAllFormulaCells(wb); D1.getNumericCellValue() # returns 2.0
I haven't used formula evaluation before, so I don't know if this is my
inexperience or a bug in POI.