Возвращение десятичной дроби вместо строки (POI jar)

Мне нужно прочитать листы xls или xlsx. я успешно прочитал лист, но он возвращает десятичное значение вместо строки (например, для 3 - он возвращает 3.0). Мне нужно прочитать значения ячеек как есть. поэтому мне нужно вернуть как строку

2 ответа

POI дает вам точное значение, которое Excel сохранил в файле. Как правило, если вы пишете число в ячейке Excel, Excel сохранит его как число с форматированием. POI предоставляет поддержку, чтобы сделать это форматирование для вас, если вы этого хотите (большинство людей не хотят - они хотят, чтобы числа как числа, чтобы они могли использовать их)

Класс, который вы ищете, это DataFormatter. Ваш код будет что-то вроде

 DataFormatter fmt = new DataFormatter();
 for (Row r : sheet) {
    for (Cell c : r) {
       CellReference cr = new CellRefence(c);
       System.out.println("Cell " + cr.formatAsString() + " is " + 
                          fmt.formatCellValue(c) );
    }
 }
//use this method for getting values from excel.It might help u.
private String getCellValue(Cell cell) {
    if (cell == null) {
        return null;
    }
    if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
        return cell.getStringCellValue();
    } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
        return cell.getNumericCellValue() + "";
    } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
        return cell.getBooleanCellValue() + "";
    }else if(cell.getCellType() == Cell.CELL_TYPE_BLANK){
        return cell.getStringCellValue();
    }else if(cell.getCellType() == Cell.CELL_TYPE_ERROR){
        return cell.getErrorCellValue() + "";
    } 
    else {
        return null;
    }
}

Используйте переключатель и такие случаи, как этот код:

switch (cell.getCellType()) { 
                    case STRING: 
                        String c = cell.getStringCellValue();

                        break; 
                    case NUMERIC: 
                        int n = (int) cell.getNumericCellValue();

                        break; 
                    case BOOLEAN:
                        boolean b = cell.getBooleanCellValue();

                    break; 
                    default : 
                        } 
Другие вопросы по тегам