# Datum in Excel Tabelle eintragen



## redbomber (29. Okt 2012)

Hallo zusammen,

ich verwende die externe Bibliothek org.apache.poi (poi 3.7) um Daten in eine Excel Tabelle zu schreiben.

Das alles funktioniert einwandfrei, allerdings habe ich das Problem mit Zellen, die das Datum (dd/MM/yyyy HH:mm) enthalten.

Die Werte in den Zellen werden nicht als Datum erkannt, erst wenn ich in Exel in die Zelle klicke und Enter drücke, dann wird die Zelle als Wert mit korrektem Datum erkannt.

Was muss ich nun also beachten wenn ich ein solches Excel-File erstelle. Wie bekomme ich es hin dass meine Spalte mit dem Datum von Excel auch als Datum erkannt wird?


----------



## Spewer (29. Okt 2012)

```
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy HH:mm"));
```

Mal so aus dem Kopf. Weiß nicht ob dir das weiterhilft.


----------



## redbomber (29. Okt 2012)

Hi,
vielen Dank. Habe versucht den CellStyle der Zellen der Datums-Spalte entsprechend zu definieren wie du es vorgeschlagen hast.
Die Spalte wird jetzt zwar anders formatiert ausgegeben, aber leider noch immer nicht als Datum erkannt. Hast du vielleicht noch eine Idee?


----------



## Spewer (31. Okt 2012)

Schau mal hier : https://poi.apache.org/spreadsheet/quick-guide.html#NewWorkbook

Da gibt es einen Abschnitt "Creating Date Cells" in dem eig. alles drin steht


----------



## redbomber (8. Nov 2012)

vielen Dank für den hilfreichen Link!

also ich habe es genauso implementiert:

```
Workbook wb = new HSSFWorkbook();
    //Workbook wb = new XSSFWorkbook();
    CreationHelper createHelper = wb.getCreationHelper();
    Sheet sheet = wb.createSheet("new sheet");

    // Create a row and put some cells in it. Rows are 0 based.
    Row row = sheet.createRow(0);

    // Create a cell and put a date value in it.  The first cell is not styled
    // as a date.
    Cell cell = row.createCell(0);
    cell.setCellValue(new Date());

    // we style the second cell as a date (and time).  It is important to
    // create a new cell style from the workbook otherwise you can end up
    // modifying the built in style and effecting not only this cell but other cells.
    CellStyle cellStyle = wb.createCellStyle();
    cellStyle.setDataFormat(
        createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
    cell = row.createCell(1);
    cell.setCellValue(new Date());
    cell.setCellStyle(cellStyle);

    //you can also set date as java.util.Calendar
    cell = row.createCell(2);
    cell.setCellValue(Calendar.getInstance());
    cell.setCellStyle(cellStyle);

    // Write the output to a file
    FileOutputStream fileOut = new FileOutputStream("workbook.xls");
    wb.write(fileOut);
    fileOut.close();
```

Ich habe doch noch immer folgendes Problem:
Der Wert wird in der Excel Tabelle korrekt angezeigt. Die Formatierung der Spalte in Excel ist jedoch auf "Benutzerdefiniert" gesetzt.
Wähle ich "Datum" aus, passiert nicht, d.h. der Inhalt der Zelle wird weiter nicht als Datum erkannt.
Wenn ich nun aber in die Zelle klicke und dann mit Enter bestätige, dann kann er den Inhalt der Zelle in ein gültiges Datum formatieren.

Nur kann ich das nicht für mehrere tausend Zellen machen.

Funktioniert das denn überhaupt was ich da vorhabe?


----------



## pappawinni (8. Nov 2012)

Naja.. versuch es halt vielleicht mal mit einer Datumsvariante wie sie bei dir unter den benutzer definierten Datumsvarianten von Excel auch zu finden ist.
Ich finde da bei mir sowas nicht "m/d/yy h:mm" .. eher sowas "TT.MM.JJJJ hh:mm" hängt vielleicht an der Ländereinstellung.
Wenn dann nachher die Umstellung in ein Datumsformat kein Problem wäre, dann wär das vielleicht wenigstens ein Teilerfolg, oder?

[EDIT]
es gäbe im Übrigen auch Möglichkeiten sowas in Excel automatisiert umzusetzen, z.B. Formeln oder VBA.
[/EDIT]


----------



## redbomber (9. Nov 2012)

Hi, vielen Dank für die Antwort.

Aber ich habe es so leider nicht hinbekommen. Also weder das direkte setzen des DataFormats einer Zelle, noch das Verwenden verschiedener Datum-Formate (yy.mm.dd ...) hat funktioniert.
Also in jedem Fall wurde zwar das Ergebnis korrekt in die Excel Tabelle geschrieben, aber die Spalte wurde von Excel nicht als Datum erkannt.

Wenn ich ehrlich bin glaube ich nicht dass dies überhaupt geht mit HSSF.

Egal, ich habe mein Problem jetzt wie folgt gelöst:

Ich verwende einen normalen BufferedWriter und schreiber tabulator getrennt die Werte in ein File, welches ich dann als *.xsl speichere.
Wenn ich diese dann mit Excel öffne, erhalte ich zwar eine Warnung dass die Tabelle nicht korrekt formatiert ist, aber sie werden dafür korrekt formatiert dargestellt und ich kann über die Spaltenformatiereung die Darstellung des Datum problemlos ändern.


----------

