Я попытался прочитать файл Excel на Java. При чтении целочисленные данные считываются как float y?

#java

#java

Вопрос:

        XSSFSheet sheet = workbook.getSheetAt(0);

        //Iterate through each rows one by one
       /* Iterator<Row> rowIterator = sheet.rowIterator();
        while (rowIterator.hasNext()) 
        {
            Row row = (Row)rowIterator.next();
            //For each row, iterate through all the columns
            Iterator<Cell> cellIterator = row.cellIterator();

            while (cellIterator.hasNext()) 
            {
                Cell cell = (Cell)cellIterator.next();*/
        Iterator<Row> rowIterator = sheet.iterator();
        while (rowIterator.hasNext()) {
          Row row = rowIterator.next();
          Iterator <Cell> cellIterator = row.cellIterator();
          while (cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
                //Check the cell type and format accordingly
          //  DataFormat format=((XSSFWorkbook) cell).createDataFormat();
                switch (cell.getCellType()) 
                {
                    case Cell.CELL_TYPE_NUMERIC:
                        System.out.print(cell.getNumericCellValue()   "t");
                        break;
                    case Cell.CELL_TYPE_STRING:
                        System.out.print(cell.getStringCellValue()   "t");

                }
            }
            System.out.println("");
        }
        file.close();
    } 
  

Здесь я получаю вывод в виде

Идентификатор Имя Телефон
1.0 Санджай 8220850855
2.0 Aswin 9.897654321E9
3.0 Santhosh 9.876543212E9
4.0 Nandu 9.089876565E9
5.0 Виджай 9.090906767E9

Комментарии:

1. Вы хотите прочитать целочисленные данные как int ? вы можете попробовать прочитать его как строку, а затем проанализировать его до требуемого типа

2. Подсказка: пожалуйста, дайте некоторые отзывы относительно моего ответа. Если это поможет, вы можете принять это; в противном случае; не стесняйтесь, дайте мне знать, когда у вас возникнут дополнительные вопросы.

Ответ №1:

Когда вы обратитесь к javadoc для метода getNumericalCellValue(), вы обнаружите: он возвращает double .

[ и просто для записи: это Java. Вы не можете вызывать один и тот же метод и ожидать, что он вернет значение int для одного вызова; и double для другого вызова! Это было бы возможно только в том случае, если метод был написан для возврата объекта Number; тогда результат может быть либо целым, либо двойным. Но для примитивных типов это невозможно! ]

Итак, ваша проблема заключается в недоразумении с вашей стороны: если ячейка имеет «числовое» значение; тогда это означает: вы можете получить доступ к значению ячейки как числу с плавающей запятой! На этом уровне нет различий между «int» и «с плавающей запятой».

Таким образом: когда вы знаете, что первый столбец содержит только целые числа; ну, тогда вы должны сделать это «неявное» понимание явным; например, путем округления / форматирования значений для первого столбца!

Другими словами: значение такое, какое оно есть. Вы должны изменить интерпретацию этого значения; на основе ваших метаинформаций о данных, с которыми вы работаете!

Наконец: этот javadoc даже сообщает вам в конце:

см .: для превращения этого числа в строку, аналогичную той, в которой Excel отобразил бы это число как