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ónCellType
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 ...
Puedes usar:
cell.getCellTypeEnum()
Además para comparar el tipo de celda, debe usar CellType de la siguiente manera:
if(cell.getCellTypeEnum() == CellType.STRING){
.
.
.
}
Puede consultar la documentación. Es bastante útil: -
https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html
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
.