30 votes

Lecture des valeurs de date depuis une cellule Excel à l'aide de l'API POI HSSF

J'utilise l'API POI HSSF pour mes excellentes manipulations en Java. J'ai une valeur de date "8/1/2009" dans l'une de mes cellules Excel et pendant que j'essaie de lire cette valeur à l'aide de l'API HSSF, il détecte le type de cellule sous forme numérique et renvoie la valeur "Double" de ma date. Voir l'exemple de code ci-dessous:

 cell = row.getCell(); // date in the cell '8/1/2009'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    cellValue = new Double(cell.getNumericCellValue()).toString();
    break;
default:
}
 

Cell.getCellType () renvoie NUMERIC_TYPE et donc ce code convertit la date en double! :(

Existe-t-il un moyen de lire la date telle qu'elle est dans POI HSSF!?

38voto

Jon Points 23749

Vous pouvez prendre un coup d'oeil à:

HSSFDateUtil.isCellDateFormatted()

Voir la PI Horrible feuille de calcul au Format API pour plus de détails sur HSSFDateUtil:

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html

Qui fournit également des méthodes d'assistance pour le retour de Excel getExcelDate() et Java dates getJavaDate(). Vous devez être un peu méfiant de différents formats de date mais...

21voto

Sayantam Points 366

Si vous souhaitez référencer la date dans le même format que dans le fichier Excel, vous devez utiliser le CellDateFormatter. Exemple de code:

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

    String dateFmt = cell.getCellStyle().getDataFormatString();
    /* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as 
    Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java 
    will always be 00 for date since "m" is minutes of the hour.*/

    strValue = new CellDateFormatter(dateFmt).format(date); 
    // takes care of idiosyncrasies of Excel
}
 

6voto

Naveen Points 61

Si vous utilisez le POI 3.5, vous pouvez utiliser les éléments suivants

méthode cell.getDateCellValue (). Cela fonctionnera également pour Excel 2007.

6voto

Stobor Points 15428

Excel traite les dates et les heures comme des nombres ... Jon l'a dit mieux, donc je ne le ferai pas écho ici ...

Cependant, un exemple de code pour ce que vous avez mis dans la question se trouve à http://poi.apache.org/spreadsheet/quick-guide.html#CellContents

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X