При получении содержимого ячейки с помощью библиотеки Apache-POI я получаю как «Невозможно получить числовое значение из текстовой ячейки», так и обратное. Как мне это исправить?

Я понимаю, что вопрос немного сбивает с толку, но я не знал, как еще его сформулировать. В любом случае, вот исходный код:

private void readFile(String excelFileName) throws FileNotFoundException, IOException {
    XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(excelFileName));
    if (workbook.getNumberOfSheets() > 1){
        System.out.println("Please make sure there is only one sheet in the excel workbook.");
    }
    XSSFSheet sheet = workbook.getSheetAt(0);
    int numOfPhysRows = sheet.getPhysicalNumberOfRows();
    XSSFRow row;
    XSSFCell num;
    for(int y = 1;y < numOfPhysRows;y++){    //start at the 2nd row since 1st should be category names
        row = sheet.getRow(y);
        poNum = row.getCell(1);
        item = new Item(Integer.parseInt(poNum.getStringCellValue());
        itemList.add(item);
        y++;
    }
}

private int poiConvertFromStringtoInt(XSSFCell cell){
    int x = Integer.parseInt(Double.toString(cell.getNumericCellValue()));
    return x;
}

Я получаю следующую ошибку:

Exception in thread "main" java.lang.IllegalStateException: Cannot get a numeric value from a text cell
    at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:781)
    at org.apache.poi.xssf.usermodel.XSSFCell.getNumericCellValue(XSSFCell.java:199)

Даже если я изменю его, чтобы получить строку с помощью XSSFCell.getStringCellValue () или даже XFFSCell. getRichTextValue , я получаю сообщение об ошибке, обратное приведенному выше (и я обязательно сделаю его целым числом, используя Integer.parseInt (XSSFCell.getStringCellValue () ).

Затем ошибка читает:

Exception in thread "main" java.lang.IllegalStateException: Cannot get a text value from a numeric cell
    at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:781)
    at org.apache.poi.xssf.usermodel.XSSFCell.getNumericCellValue(XSSFCell.java:199)

Я точно знаю, что столбец электронной таблицы Excel на самом деле является строкой. Я не могу изменить лист Excel, поскольку он загружается в другом месте, где всегда используется один и тот же формат, и форматирование каждого столбца сначала требует большой обработки время.

Есть предложения?

[Решение] Вот код решения, который я придумал из справки @ Wivani:

private long poiGetCellValue(XSSFCell cell){
    long x;
    if(cell.getCellType() == 0)
        x = (long)cell.getNumericCellValue();
    else if(cell.getCellType() == 1)
        x = Long.parseLong(cell.getStringCellValue());
    else
        x = -1;
    return x;
}
22
задан crstamps2 28 June 2011 в 17:50
поделиться