type the setcelltype poi method hssfcell getnumericcellvalue from celltype cell_type_numeric java apache-poi

java - the - Alternativa a getCellType en desuso



setcelltype poi (7)

Estoy leyendo un archivo de Excel (extensión de archivo xlsx) usando org.apache.poi 3.15.

Este es mi código:

try (FileInputStream fileInputStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(file)) { XSSFSheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "(Integer)/t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "(String)/t"); break; } } System.out.println(""); } } catch (Exception e) { e.printStackTrace(); }

Recibo una advertencia de que cell.getCellType() está en desuso. ¿Alguien puede decirme la alternativa?


De la documentation :

int getCellType() . PDI 3.15. CellType una enumeración CellType en el futuro.

Devuelve el tipo de celda. CellType en la versión 4.0 de POI. Para compatibilidad hacia adelante, no codifique los literales de tipo de celda en su código.


La respuesta aceptada muestra el motivo de la desaprobación, pero no menciona la alternativa:

CellType getCellTypeEnum()

donde CellType es la enumeración que describe el tipo de celda.

El plan es cambiar el nombre de getCellTypeEnum() a getCellType() en POI 4.0.


Para POI 3.17 esto funcionó para mí

switch (cellh.getCellTypeEnum()) { case FORMULA: if (cellh.getCellFormula().indexOf("LINEST") >= 0) { value = Double.toString(cellh.getNumericCellValue()); } else { value = XLS_getDataFromCellValue(evaluator.evaluate(cellh)); } break; case NUMERIC: value = Double.toString(cellh.getNumericCellValue()); break; case STRING: value = cellh.getStringCellValue(); break; case BOOLEAN: if(cellh.getBooleanCellValue() == true){ value = "true"; } else { value = "false"; } break; default: value = ""; break; }


Parece que 3.15 no ofrece una solución satisfactoria: uno usa el estilo antiguo con Cell.CELL_TYPE_ * o usamos el método getCellTypeEnum () que está marcado como obsoleto. Muchas molestias por poco valor agregado ...



Use getCellType ()

switch (cell.getCellType()) { case BOOLEAN : //To-do break; case NUMERIC: //To-do break; case STRING: //To-do break; }


FileInputStream fis = new FileInputStream(new File("C:/Test.xlsx")); //create workbook instance XSSFWorkbook wb = new XSSFWorkbook(fis); //create a sheet object to retrieve the sheet XSSFSheet sheet = wb.getSheetAt(0); //to evaluate cell type FormulaEvaluator formulaEvaluator = wb.getCreationHelper().createFormulaEvaluator(); for(Row row : sheet) { for(Cell cell : row) { switch(formulaEvaluator.evaluateInCell(cell).getCellTypeEnum()) { case NUMERIC: System.out.print(cell.getNumericCellValue() + "/t"); break; case STRING: System.out.print(cell.getStringCellValue() + "/t"); break; default: break; } } System.out.println(); }

Este código funcionará bien. Use getCellTypeEnum() y para comparar use solo NUMERIC o STRING .