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?
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
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
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.
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);
}