Подтвердить что ты не робот

Альтернатива устаревшему getCellType

Я читаю excel файл (расширение файла xlsx), используя org.apache.poi 3.15.

Это мой код:

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

Я получаю предупреждение о том, что cell.getCellType() устарел. Может ли кто-нибудь сказать мне альтернативу?

4b9b3361

Ответ 1

Принятый ответ показывает причину устаревания, но пропускает имя альтернативы:

CellType    getCellTypeEnum()

где CellType - это перечисление, описывающее тип ячейки.

План состоит в том, чтобы переименовать getCellTypeEnum() обратно в getCellType() в POI 4.0.

Ответ 2

Вы можете использовать:

cell.getCellTypeEnum()

Далее, чтобы сравнить тип ячейки, вы должны использовать CellType следующим образом: -

if(cell.getCellTypeEnum() == CellType.STRING){
      .
      .
      .
}

Вы можете обратиться к документации. Его очень полезно: -

https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Cell.html

Ответ 3

Используйте getCellType()

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

Ответ 4

Из документации:

int getCellType() Устаревший. POI 3.15. CellType перечисление CellType в будущем.

Верните тип ячейки. CellType в версии 4.0 POI. Для передовой совместимости не производите в коде код типа ячейки с жестким кодом.

Ответ 5

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

Этот код будет работать нормально. Используйте getCellTypeEnum() и для сравнения используйте только NUMERIC или STRING.

Ответ 6

Похоже, что 3.15 не предлагает удовлетворительного решения: либо использует старый стиль с Cell.CELL_TYPE_ *, либо мы используем метод getCellTypeEnum(), который помечен как устаревший. Много нарушений для небольшой добавленной стоимости...

Ответ 7

Для POI 3.17 это сработало для меня

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