web-dev-qa-db-ja.com

非推奨のgetCellTypeの代替

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()が非推奨であるという警告が表示されます。誰かが代替案を教えてもらえますか?

46
user1766169

受け入れられた答えは、廃止の理由を示していますが、代替の名前を付け忘れています:

CellType    getCellTypeEnum()

ここで、CellTypeは、セルのタイプを記述する列挙です。

POI 4.0では、getCellTypeEnum()の名前をgetCellType()に戻す予定です。

49
Tomasz Stanczak

次を使用できます。

cell.getCellTypeEnum()

さらにセルタイプを比較するには、次のようにCellTypeを使用する必要があります:

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

ドキュメントを参照できます。そのかなり役立つ:-

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

14
user7171758

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

このコードは正常に機能します。 getCellTypeEnum()を使用して比較するには、NUMERICまたはSTRINGのみを使用します。

5
Arindam

ドキュメント から:

int getCellType()非推奨。 POI 3.15。将来的にCellType列挙型を返します。

セルタイプを返します。 POIバージョン4.0ではCellTypeを返します。上位互換性のために、コードにセル型リテラルをハードコーディングしないでください。

5
DimaSan

3.15は満足のいく解決策を提供していないようです。Cell.CELL_TYPE_*の古いスタイルを使用するか、廃止予定としてマークされたgetCellTypeEnum()メソッドを使用します。少しの付加価値のための多くの妨害...

2
frva

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