Lors de l'obtention du contenu d'une cellule à l'aide d'Apache-POI de la Bibliothèque, je reçois à la fois “Impossible d'obtenir une valeur numérique à partir d'une cellule de texte” et à l'inverse de celle. Comment puis-je résoudre ce problème?

Je me rends compte que la question est un peu confuse, mais je ne savais pas comment l'exprimer. De toute façon, voici le code original:

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

J'obtiens l'erreur suivante:

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)

Même si je le modifier pour obtenir une chaîne de caractères à l'aide de XSSFCell.getStringCellValue() ou même XFFSCell.getRichTextValue, j'ai l'inverse de ce qui précède message d'erreur (et je suis veiller à, finalement, de prendre un int à l'aide de Integer.parseInt(XSSFCell.getStringCellValue()).

L'erreur de lit ensuite:

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)

Je sais pour un fait que la feuille de calcul excel colonne est en fait une chaîne de caractères. Je ne peux pas changer la feuille excel comme il est transféré ailleurs où en utilisant toujours le même format et la mise en forme de chaque colonne de la première prend beaucoup de temps de traitement.

Des suggestions?

[Solution] Voici la solution de code, je suis venu avec de @Wivani aide:

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;
}
  • Vérifier l'API; il existe des méthodes pour interroger le type d'une colonne, de sorte que vous pouvez l'utiliser pour vérifier si vous devez convertir ou pas. PS Que l'extrait de code est insuffisante pour vraiment vous aider à déboguer.
  • Que tout le monde sache ce qui s'est passé, j'ai découvert que les 100 premiers ou les numéros eu un 0. Cela a provoqué excel automatiquement en faire une chaîne de caractères. Donc j'ai dû écrire une méthode pour vérifier le type de premier et ensuite le format en conséquence. Merci @Wivani
  • Intéressant peut-être pour la future référence pour ajouter votre solution de code"?
InformationsquelleAutor crstamps2 | 2011-06-28