J'utilise l'API POI HSSF pour mes manipulations Excel en Java. J'ai une valeur de date "01/08/2009" dans l'une de mes cellules Excel et pendant que j'essaie de lire cette valeur à l'aide de l'API HSSF, le type de cellule est Numeric 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 ce code convertit donc la date en double! :(
Y a-t-il un moyen de lire la date telle qu'elle est dans POI HSSF!?
Vous pouvez jeter un oeil à:
HSSFDateUtil.isCellDateFormatted()
Voir l’API Horrible Spreadsheet Format de POI pour plus de détails sur HSSFDateUtil:
http://poi.Apache.org/apidocs/org/Apache/poi/hssf/usermodel/HSSFDateUtil.html
Cela fournit également des méthodes d'assistance pour renvoyer Excel getExcelDate()
et les dates Java getJavaDate()
. Vous devez cependant vous méfier des formats de date différents ...
Si vous souhaitez référencer la date dans le même format que dans le fichier Excel, vous devez utiliser 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
}
Excel traite les dates et les heures comme des chiffres ... Jon l'a dit mieux, donc je ne lui ferai pas l'écho ici ...
Cependant, vous trouverez un exemple de code pour ce que vous avez mis dans la question à l'adresse http://poi.Apache.org/spreadsheet/quick-guide.html#CellContents
Si vous utilisez le POI 3.5, vous pouvez utiliser les éléments suivants
méthode cell.getDateCellValue (). Cela fonctionnera également pour Excel 2007.
Depuis POI 3.15 beta3, certaines fonctions sont deprecated
. Vous pouvez vérifier le format des données et les récupérer en tant que Java Date
.
SimpleDateFormat format = new SimpleDateFormat("");
String cellValue;
if(cell != null && cell.getCellTypeEnum() != CellType.STRING &&
cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){
cellValue = format.format(cell.getDateCellValue());
}