Je lis un fichier Excel (extension de fichier xlsx) en utilisant org.Apache.poi 3.15.
Ceci est mon code:
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();
}
Je reçois un message m'avertissant que cell.getCellType()
est obsolète. Quelqu'un peut-il me dire l'alternative?
La réponse acceptée indique le motif de la dépréciation, mais omet de nommer l’alternative:
CellType getCellTypeEnum()
où CellType
est l'énumération décrivant le type de la cellule.
Le plan consiste à renommer getCellTypeEnum()
en getCellType()
dans POI 4.0.
Vous pouvez utiliser:
cell.getCellTypeEnum()
En outre, pour comparer le type de cellule, vous devez utiliser CellType comme suit: -
if(cell.getCellTypeEnum() == CellType.STRING){
.
.
.
}
Vous pouvez vous référer à la documentation. C'est très utile: -
https://poi.Apache.org/apidocs/org/Apache/poi/ss/usermodel/Cell.html
Utilisez 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();
}
Ce code fonctionnera bien. Utilisez getCellTypeEnum()
et pour comparer utilisez simplement NUMERIC
ou STRING
.
De la documentation :
int getCellType()
Obsolète. POI 3.15. Retourne unCellType
enum dans le futur.Renvoie le type de cellule. Renverra
CellType
dans la version 4.0 de POI. Pour une compatibilité en aval, ne codez pas en dur les littéraux de type cellule dans votre code.
Il semble que 3.15 n'offre aucune solution satisfaisante: soit on utilise l'ancien style avec Cell.CELL_TYPE_ *, soit on utilise la méthode getCellTypeEnum () qui est marquée comme obsolète. Beaucoup de perturbations pour peu de valeur ajoutée ...
Pour POI 3.17 cela a fonctionné pour moi
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;
}