2011-06-03 2 views
1

J'utilise Apache POI-HSSF pour travailler avec des fichiers Excel.Apache POI-HSSF: obtention d'une valeur décimale au lieu d'une chaîne de caractères

J'ai une cellule dans ma feuille de calcul qui ressemble à "115". J'ai vérifié qu'il est formaté en "Texte" (Format Cellules -> Texte).

Cependant, quand je l'ai lu en tant que row.getCell (0) .toString()

Je reçois cette chaîne: "115,0"

Ceci est incorrect. Je devrais obtenir "115" car il est explicitement formaté en texte. Comment puis-je obtenir le résultat souhaité? La cellule peut être quelque chose, des nombres ou des caractères, et j'attends la même chaîne que dans la cellule. Merci

Répondre

2

Formaté comme du texte ne signifie pas stocké sous forme de texte, ils sont différents. Excel a stocké votre cellule sous la forme d'un nombre, et lorsque vous demandez un POI pour la cellule, vous récupérez une cellule numérique.

Si vous demandez à la cellule que vous revenez de quel type il est, vous découvrirez qu'il est de type CELL_TYPE_NUMERIC et non CELL_TYPE_STRING

Qu'est-ce que vous voudrez probablement faire est d'utiliser la DataFormatter class pour avoir votre cellule formatée en par Excel. Cela ressemblera alors à ce que vous attendez. (Tout comme les cellules formatées en tant que devise, pourcentages, etc.)

+0

merci, il travaille – user783312

1

Vous devez appeler la méthode HSSFCell.getCellType() pour déterminer son type. Voici une méthode qui gère les cellules de type String ou Numeric. (Vous pouvez facilement ajouter d'autres types.) Le format utilisé pour les nombres sera un format valide, mais ne correspondra pas nécessairement à celui de la feuille de calcul. (Cela est couvert ci-dessous.)

public static String getCellStringValue(final HSSFCell cell) { 
    int cellType = cell.getCellType(); 
    String value; 
    if (cellType == HSSFCell.CELL_TYPE_NUMERIC) { 
     // Locale is optional here 
     DataFormatter dataFormatter = new DataFormatter(Locale.US); 
     value = dataFormatter.formatCellValue(cell); 
    } else { 
     // HSSFCell.CELL_TYPE_STRING 
     value = cell.getStringCellValue(); 
    } // more cell types are possible. Add whatever you need. 
    return value; 
} 

Ce code formatera pas nécessairement le nombre tel qu'il apparaît dans Excel. Si vous souhaitez que le format corresponde exactement au format de la feuille de calcul, vous pouvez obtenir un formateur à partir de la cellule elle-même. Pour ce faire, vous pouvez utiliser votre instance de DataFormatter pour créer une instance Format:

public static String getCellStringValue(final HSSFCell cell) { 
    int cellType = cell.getCellType(); 
    String value; 
    if (cellType == HSSFCell.CELL_TYPE_NUMERIC) { 
     // Locale is optional here 
     DataFormatter dataFormatter = new DataFormatter(Locale.US); 
     Format format = dataFormatter.createFormat(cell); 
     value = format.format(cell.getNumericCellValue()); 
    } else { 
     // HSSFCell.CELL_TYPE_STRING 
     value = cell.getStringCellValue(); 
    } // more cell types are possible. Add whatever you need. 
    return value; 
} 
Questions connexes