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!?

War es hilfreich?

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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top