Вы должны использовать FormulaEvaluator, как показано здесь . Это вернет значение, которое является либо значением, присутствующим в ячейке, либо результатом формулы, если ячейка содержит такую формулу:
FileInputStream fis = new FileInputStream("/somepath/test.xls");
Workbook wb = new HSSFWorkbook(fis); //or new XSSFWorkbook("/somepath/test.xls")
Sheet sheet = wb.getSheetAt(0);
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
// suppose your formula is in B3
CellReference cellReference = new CellReference("B3");
Row row = sheet.getRow(cellReference.getRow());
Cell cell = row.getCell(cellReference.getCol());
if (cell!=null) {
switch (evaluator.evaluateFormulaCell(cell)) {
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.println(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
System.out.println(cell.getStringCellValue());
break;
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_ERROR:
System.out.println(cell.getErrorCellValue());
break;
// CELL_TYPE_FORMULA will never occur
case Cell.CELL_TYPE_FORMULA:
break;
}
}
если вам нужен точный константа (т. Е. Формула, если ячейка содержит формулу), тогда это показано здесь .
Редактировать:
Добавил несколько примеров, чтобы помочь вам.
сначала вы получите ячейку (просто пример)
Row row = sheet.getRow(rowIndex+2);
Cell cell = row.getCell(1);
Если вы просто хотите установить значение в ячейку по формуле (не зная результата):
String formula ="ABS((1-E"+(rowIndex + 2)+"/D"+(rowIndex + 2)+")*100)";
cell.setCellFormula(formula);
cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground);
если вы хотите изменить сообщение, если в ячейке есть ошибка, вам нужно изменить формулу, например,
IF(ISERR(ABS((1-E3/D3)*100));"N/A"; ABS((1-E3/D3)*100))
(эта формула проверяет, возвращает ли оценка ошибку, а затем отображает строку «N / A», или оценку, если это не ошибка).
если вы хотите получить значение, соответствующее формуле, тогда вам нужно использовать оценщик.
Надеюсь, эта помощь,
Гийом