2010-06-30 4 views
42

J'utilise Apache POI 3.6, je veux lire un fichier Excel qui a une date comme celle-ci 8/23/1991.Comment lire une cellule Excel ayant une date avec un POI Apache?

switch (cell.getCellType()) { 

    ... 
    ... 

    case HSSFCell.CELL_TYPE_NUMERIC: 
    value = "NUMERIC value=" + cell.getNumericCellValue(); 
    break; 

    ... 

} 

Mais il prend le type de valeur numérique et retourne la valeur comme celui-ci 33473.0.

J'ai essayé d'utiliser le type de cellule numérique, mais sans succès.

dbltemp=row.getCell(c, Row.CREATE_NULL_AS_BLANK).getNumericCellValue(); 

if (c == 6 || c == 9) { 
    strTemp= new String(dbltemp.toString().trim()); 

    long tempDate = Long.parseLong(strTemp); 
    Date date = new Date(tempDate); 

    strVal = date.toString(); 
} 

Comment puis-je résoudre mon problème?

Répondre

81

Si vous savez quelle cellule, c'est-à-dire la position de la colonne, dites 0 dans chaque ligne va être une date, vous pouvez opter directement pour row.getCell(0).getDateCellValue().
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue()

MISE À JOUR: Voici un exemple - vous pouvez l'appliquer dans votre code de commutateur ci-dessus. Je vérifie et imprime la valeur numérique ainsi que la valeur de date. Dans ce cas, la première colonne de ma feuille contient des dates, donc j'utilise row.getCell (0).

Vous pouvez utiliser le bloc de code if (HSSFDateUtil.isCellDateFormatted .. directement dans votre boîtier de commutateur.

if (row.getCell(0).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) 
    System.out.println ("Row No.: " + row.getRowNum()+ " " + 
     row.getCell(0).getNumericCellValue()); 

    if (HSSFDateUtil.isCellDateFormatted(row.getCell(0))) { 
     System.out.println ("Row No.: " + row.getRowNum()+ " " + 
      row.getCell(0).getDateCellValue()); 
    } 
} 

La sortie est

Row No.: 0 39281.0 
Row No.: 0 Wed Jul 18 00:00:00 IST 2007 
Row No.: 1 39491.0 
Row No.: 1 Wed Feb 13 00:00:00 IST 2008 
Row No.: 2 39311.0 
Row No.: 2 Fri Aug 17 00:00:00 IST 2007 
+0

Je ne peux pas obtenir de valeurs ... Si vous pouviez spécifier un extrait de code, ce serait génial ... – Venkat

+0

mis à jour pour icnlude mon code – JoseK

+7

Appel DateUtil.isCellDateFormatted() sera un pas en avant dans la manière de libérer votre code des HSSF et des XSSF. En utilisant des parents globaux au lieu des enfants HSSF/XSSF dépendants de XLS/XLSX, vous pouvez rendre votre code beaucoup plus universel. –

1

Vous avez besoin de DateUtils: voir this article pour plus de détails.

Ou, mieux encore, utilisez JExcel d'Andy Khan au lieu de POI.

+0

J'ai presque beaucoup de choses dans mis en œuvre POI, je suis désolé que je ne peux pas aller tout simplement pour cela .. Il doit y avoir quelque chose .. Pourtant, Merci duffymo – Venkat

+1

DateUtils vous trier si vous ne pouvez pas passer à JExcel – duffymo

5

Oui, je compris votre problème. Si la cellule est difficile à identifier, elle a une valeur numérique ou numérique.

Si vous voulez des données au format affiché dans Excel, il vous suffit de formater la cellule à l'aide de la classe DataFormatter.

DataFormatter dataFormatter = new DataFormatter(); 
String cellStringValue = dataFormatter.formatCellValue(row.getCell(0)); 
System.out.println ("Is shows data as show in Excel file" + cellStringValue); // Here it automcatically format data based on that cell format. 
// No need for extra efforts 
Questions connexes