使用Apache Poi从Excel工作表中获取单元格值

如何在Java中使用poi获取单元格值?

我的代码看起来像这样

String cellformula_total__percentage= "(1-E" + (rowIndex + 2) + "/" + "D" + (rowIndex + 2) + ")*100";

cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);

cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground);

cell.setCellFormula("abs(" + cellformula_total__percentage + ")");

但是,如果在这种情况下,我如何检查我的单元格值是否包含错误值,例如#DIV / 0!以及如何用N / A替换它

回答:

您必须使用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;

}

}

如果您需要精确的内容(例如,如果单元格包含公式,则为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”,或者如果评估不是错误,则显示评估)。

希望能有所帮助,

纪尧姆

以上是 使用Apache Poi从Excel工作表中获取单元格值 的全部内容, 来源链接: utcz.com/qa/405332.html

回到顶部