无法使用poi Java评估多个图纸之间的公式?

时间:2018-10-09 10:04:33

标签: java excel apache-poi

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)"

位置:

  • c-24值为0.00
  • c-25值为0.00
  • c- 31是0.00

因此具有值的公式将是:

"if(0<SUM(0:0),0*1/SUM(0:0),0)"

似乎无法计算公式中的if条件。 我该如何解决?

1 个答案:

答案 0 :(得分:0)

无法使用apache poi 4.0.0.重现此问题。

具有以下Excel:

enter image description here

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]

因此它的评估结果很好。