Невозможно оценить формулу между несколькими листами с помощью poi Java? - PullRequest
0 голосов
/ 09 октября 2018
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 голосов
/ 10 октября 2018

Невозможно воспроизвести эту проблему, используя apache poi 4.0.0..

Имея следующие Excel:

enter image description here

Формула в A1 is =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]

Таким образом, он оценивается нормально.

...