您必须使用公式评估器,如此处所示。这将返回一个值,该值可以是单元格中存在的值,也可以是公式的结果(如果单元格包含这样的公式):
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;
}
}
如果您需要确切的contant(即formla,如果单元格包含公式),那么这里显示。
编辑:添加了一些示例来帮助您。
首先你得到单元格(只是一个例子)
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”,如果这不是错误,则显示计算结果)。
如果要获取与公式对应的值,则必须使用赋值器。
希望这个帮助,
纪尧姆