java - पदावनत getCellType के लिए वैकल्पिक




apache-poi (5)

मैं org.apache.poi 3.15 का उपयोग कर एक एक्सेल-फ़ाइल (फ़ाइल एक्सटेंशन 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() पदावनत है। क्या कोई मुझे विकल्प बता सकता है?


GetCellType () का उपयोग करें

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

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

ऐसा लगता है कि 3.15 कोई संतोषजनक समाधान प्रदान नहीं करता है: या तो सेल के साथ पुरानी शैली का उपयोग करता है। CELL_TYPE_ *, या हम विधि getCellTypeEnum () का उपयोग करते हैं जो कि पदावनत के रूप में चिह्नित है। थोड़ा मूल्य जोड़ने के लिए बहुत सारी गड़बड़ी ...


स्वीकार किए गए उत्तर में पदावनति का कारण दिखाया गया है, लेकिन विकल्प का नाम याद नहीं किया गया है:

CellType    getCellTypeEnum()

जहाँ CellType सेल के प्रकार को समझने वाला एनम है।

POI 4.0 में getCellType() को getCellType() वापस नाम getCellTypeEnum()


    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 उपयोग की तुलना करें।