Lecture des valeurs de date de la cellule excel à L'aide de L'API POI HSSF
J'utilise L'API POI HSSF pour mes manipulations excel en Java. J'ai une valeur de date "8/1/2009" dans une de mes cellules excel et pendant que j'essaie de lire cette valeur en utilisant L'API HSSF, elle détecte le type de cellule comme 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:
}
Cellule.getCellType () retourne NUMERIC_TYPE et donc ce code convertit la date en double! : (
Est-il possible de lire la date, comme il est dans HSSF PVE !?
5 réponses
Vous pouvez prendre un coup d'oeil à:
HSSFDateUtil.isCellDateFormatted()
voir L'API de format de tableur poi Horrible pour plus de détails sur HSSFDateUtil:
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html
cela fournit aussi quelques méthodes d'aide pour retourner Excel getExcelDate()
et Java dates getJavaDate()
. Vous devez cependant vous méfier un peu des différents formats de date...
si vous voulez référencer la date dans le même format que dans le fichier Excel, vous devez utiliser la 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 nombres... Jon l'a mieux dit, Je ne ferai pas écho ici...
Toutefois, des exemples de code pour ce que vous avez mis dans la question, à http://poi.apache.org/spreadsheet/quick-guide.html#CellContents
si vous utilisez le POI 3.5, vous pouvez utiliser
cellule.méthode getDateCellValue (). Cela fonctionnera également pour excel 2007.
depuis POI 3.15 beta3 certaines fonctions sont deprecated
.
Vous pouvez vérifier le format de données et de récupérer comme 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());
}