已弃用的getCellType的替代方案

时间:2016-10-12 08:14:54

标签: java apache-poi

我正在使用org.apache.poi 3.15读取excel文件(文件扩展名为xlsx)。

这是我的代码:

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()已被弃用。谁能告诉我替代方案?

8 个答案:

答案 0 :(得分:44)

接受的答案显示了弃用的原因,但没有注明替代名称:

CellType    getCellTypeEnum()

其中CellType是描述单元格类型的枚举。

计划是在POI 4.0中将getCellTypeEnum()重命名为getCellType()

答案 1 :(得分:13)

您可以使用:

cell.getCellTypeEnum()

为了比较单元格类型,您必须按如下方式使用CellType: -

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

您可以参考文档。它非常有帮助: -

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

答案 2 :(得分:6)

使用getCellType()

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

答案 3 :(得分:5)

来自documentation

  

int getCellType()   已过时。 POI 3.15。将来会返回CellType枚举。

     

返回单元格类型。将在POI 4.0版中返回CellType。为了向前兼容,请不要在代码中对单元格类型文字进行硬编码。

答案 4 :(得分: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()并比较使用NUMERICSTRING

答案 5 :(得分:2)

看起来3.15没有提供令人满意的解决方案:其中一个使用旧样式和Cell.CELL_TYPE_ *,或者我们使用标记为已弃用的方法getCellTypeEnum()。 很多干扰几乎没有增加价值......

答案 6 :(得分:0)

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

答案 7 :(得分:-2)

您可以这样做:

private String cellToString(HSSFCell cell) {
    CellType type;
    Object result;
    type = cell.getCellType();

    switch (type) {
        case NUMERIC :  //numeric value in excel
            result = cell.getNumericCellValue();
            break;
        case STRING : //String Value in Excel
            result = cell.getStringCellValue();
            break;
        default :
            throw new RuntimeException("There is no support for this type of value in Apche POI");
    }
    return result.toString();
}