web-dev-qa-db-fra.com

Alternative à obsolète getCellType

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?

46
user1766169

La réponse acceptée indique le motif de la dépréciation, mais omet de nommer l’alternative:

CellType    getCellTypeEnum()

CellType est l'énumération décrivant le type de la cellule.

Le plan consiste à renommer getCellTypeEnum() en getCellType() dans POI 4.0.

49
Tomasz Stanczak

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

14
user7171758

Utilisez getCellType ()

switch (cell.getCellType()) {
   case BOOLEAN :
                 //To-do
                 break;
   case NUMERIC:
                 //To-do
                 break;
   case STRING:
                 //To-do
                 break;
}
8
Benigno Sales
    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.

5
Arindam

De la documentation :

int getCellType() Obsolète. POI 3.15. Retourne un CellType 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.

5
DimaSan

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 ...

2
frva

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