Obtenga Cell Value de la hoja de Excel con Apache Poi

¿Cómo obtener el valor de celda con poi en java?

Mi código se ve así

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

Pero si hay en este caso, ¿cómo puedo verificar que el valor de mi celda contenga un valor de error como # DIV / 0! y cómo puedo reemplazarlo con N / A

Tienes que usar FormulaEvaluator, como se muestra aquí . Esto devolverá un valor que es el valor presente en la celda o el resultado de la fórmula si la celda contiene dicha fórmula:

 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; } } 

si necesita el contant exacto (es decir, el formla si la celda contiene una fórmula), esto se muestra aquí .

Editar: agregué algunos ejemplos para ayudarte.

primero obtienes la celda (solo un ejemplo)

 Row row = sheet.getRow(rowIndex+2); Cell cell = row.getCell(1); 

Si solo desea establecer el valor en la celda con la fórmula (sin conocer el resultado):

  String formula ="ABS((1-E"+(rowIndex + 2)+"/D"+(rowIndex + 2)+")*100)"; cell.setCellFormula(formula); cell.setCellStyle(this.valueRightAlignStyleLightBlueBackground); 

si desea cambiar el mensaje si hay un error en la celda, debe cambiar la fórmula para hacerlo, algo así como

 IF(ISERR(ABS((1-E3/D3)*100));"N/A"; ABS((1-E3/D3)*100)) 

(esta fórmula verifica si la evaluación arroja un error y luego muestra la cadena “N / A” o la evaluación si no es un error).

si desea obtener el valor correspondiente a la fórmula, entonces debe usar el evaluador.

Espero que esto ayude,
Guillaume

Puede ser por: –

  for(Row row : sheet) { for(Cell cell : row) { System.out.print(cell.getStringCellValue()); } } 

Para un tipo específico de celda, puede intentar:

 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: cellValue = cell.getStringCellValue(); break; case Cell.CELL_TYPE_FORMULA: cellValue = cell.getCellFormula(); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { cellValue = cell.getDateCellValue().toString(); } else { cellValue = Double.toString(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BLANK: cellValue = ""; break; case Cell.CELL_TYPE_BOOLEAN: cellValue = Boolean.toString(cell.getBooleanCellValue()); break; }