FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
CellValue evalCellValue = evaluator.evaluate(cell);
if(evalCellValue.getCellType() == Cell.CELL_TYPE_STRING)
{
res = evalCellValue.getStringValue();
}
else if(evalCellValue.getCellType()==Cell.CELL_TYPE_BOOLEAN)
{
res = Boolean.toString(evalCellValue.getBooleanValue());
}
if(evalCellValue.getCellType()==Cell.CELL_TYPE_NUMERIC)
{
res = Double.toString(evalCellValue.getNumberValue());
}
我想获取一个单元格的评估值,但它给出了#DIV / 0!错误 单元格上的公式:
="IF($C$31<SUM($C$24:$C$25),$C$31*C24/SUM($C$24:$C$25),C24)"
位置:
因此具有值的公式将是:
"if(0<SUM(0:0),0*1/SUM(0:0),0)"
似乎无法计算公式中的if条件。 我该如何解决?
答案 0 :(得分:0)
无法使用apache poi 4.0.0.
重现此问题。
具有以下Excel:
A1
中的公式为=IF($C$31<SUM($C$24:$C$25),$C$31*C24/SUM($C$24:$C$25),C24)
。
使用此代码:
import org.apache.poi.ss.usermodel.*;
import java.io.FileInputStream;
class ExcelFormulaEvaluatorIFDIV0 {
public static void main(String[] args) throws Exception {
Workbook workbook = WorkbookFactory.create(new FileInputStream("SAMPLE.xlsx"));
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Sheet sheet = workbook.getSheetAt(0);
Cell cell = sheet.getRow(0).getCell(0);
CellValue cellvalue = evaluator.evaluate(cell);
System.out.println(cell.getAddress() + ":" + cell + " evaluates to:" + cellvalue);
workbook.close();
}
}
产生:
axel@arichter:~/Dokumente/JAVA/poi/poi-4.0.0$ java -cp .:./*:./lib/*:./ooxml-lib/* ExcelFormulaEvaluatorIFDIV0
A1:IF($C$31<SUM($C$24:$C$25),$C$31*C24/SUM($C$24:$C$25),C24) evaluates to:org.apache.poi.ss.usermodel.CellValue [0.0]
因此它的评估结果很好。