Lesen Datumswerte von Excel-Zelle mit POI HSSF API
-
21-08-2019 - |
Frage
Ich verwende POI HSSF API für meine Excel-Manipulationen in Java. Ich habe ein Datum Wert „8/1/2009“ in einen meiner Excel-Zelle und während ich versuche, diesen Wert mit HSSF API zu lesen, erkennt er den Zellentyp als Zahlen- und gibt den ‚Double‘ Wert meines Datums. Siehe den folgenden Beispielcode:
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 () gibt NUMERIC_TYPE und damit diesen Code konvertiert das Datum zu verdoppeln! : (
Gibt es eine Möglichkeit, das Datum zu lesen, wie es in HSSF POI ist!?
Lösung
Sie können einen Blick auf:
HSSFDateUtil.isCellDateFormatted()
Sehen Sie das POI Horrible Spreadsheet-Format API für weitere Details über HSSFDateUtil:
http://poi.apache.org/ apidocs / org / apache / poi / HSSF / usermodel / HSSFDateUtil.html
Das ist auch einige Hilfsmethoden für die Rückgabe Excel getExcelDate()
bietet und Java Termine getJavaDate()
. Sie müssen etwas vorsichtig unterschiedliche Datumsformate obwohl sein ...
Andere Tipps
Wenn Sie das Datum im gleichen Format in wie in der Excel-Datei verweisen möchten, sollten Sie die CellDateFormatter verwenden. Beispielcode:
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 behandelt Datums- und Zeitangaben als Zahlen ... Jon sagte, es besser, so will ich ihn hier nicht echo ...
Allerdings Beispielcode für das, was Sie in der Frage gestellt haben, ist unter http : //poi.apache.org/spreadsheet/quick-guide.html#CellContents
Wenn Sie die POI 3.5 verwenden, können Sie mit dem folgenden Befehl
cell.getDateCellValue () -Methode. Dies wird auch für Excel 2007 arbeiten.
Da POI 3.15 beta3 Einige Funktionen sind deprecated
.
Sie können Datenformat überprüfen und als Java Date
abgerufen werden.
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());
}