web-dev-qa-db-fra.com

Comment lire une cellule Excel avec Date avec Apache POI?

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

 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 ceci 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? 

48
Venkat

Si vous savez quelle cellule, par exemple, la position de la colonne indique 0 dans chaque ligne, cela correspond à une date, vous pouvez rechercher directement row.getCell(0).getDateCellValue().
http://poi.Apache.org/apidocs/org/Apache/poi/hssf/usermodel/HSSFCell.html#getDateCellValue ()

UPDATE: Voici un exemple - vous pouvez l’appliquer dans le code de votre commutateur ci-dessus. Je vérifie et j'imprime les valeurs Numeric et Date. Dans ce cas, la première colonne de ma feuille a 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
91
JoseK

Oui, j'ai compris votre problème ... Il est difficile d'identifier la cellule a valeur numérique ou donnée.

Si vous souhaitez que les données soient au format 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 
8
Chintan

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

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

1
duffymo

Vous pouvez utiliser Format de date de cellule pour extraire la date dans le même format que dans la cellule Excel. Voir le code suivant:

CellValue cv = formulaEv.evaluate(cell);
double dv = cv.getNumberValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
    Date date = HSSFDateUtil.getJavaDate(dv);

    String df = cell.getCellStyle().getDataFormatString();

    strValue = new CellDateFormatter(df).format(date); 
}
0
Abhishek Mishra