Wie Sie sich richtig formatieren einer Zelle date, und füllen Sie Inhalte mit Apache POI 3.7

Hintergrund:

Ich brauche zu exportieren einer Tabellenkalkulation Dokument mit einer Spalte mit Datum formatiert Daten.

Ich bin derzeit Aufbau der Arbeitsmappe-Stil, etwa so:

...
dateTimeStyle = workbook.createCellStyle();
//dateTimeStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
dateTimeStyle.setDataFormat((short)0x16);
...

und das einfügen der Daten in die Zelle/Einstellung das format von der Zelle, etwa so:

...    
if (Date.class.isAssignableFrom(o.getClass())) {

    Calendar cal = Calendar.getInstance();
    cal.setTime((Date) o);
    cell.setCellStyle(dateTimeStyle);
    cell.setCellValue(cal);
}
...

Hinweis: Nach BuiltinFormats Dokumentation (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html) 0x16 bezieht sich auf das Datum-format, das ich bin versucht zu erreichen.

Das problem ist, dass ich, wenn ich öffnen Sie das exportierte Dokument in Microsoft Office Excel 2007, wenn ich mit der rechten Maustaste auf die Zelle und wählen Sie Zellen Formatieren... es zeigt die gewählte Zelle mit einem benutzerdefinierten format dd/mm/yyyy hh:mm

Wie Sie sich richtig formatieren einer Zelle date, und füllen Sie Inhalte mit Apache POI 3.7

Auch, SVERWEIS Operationen funktionieren nicht auf der Säule (was ich, zugegebenermaßen, falsch gemacht):

Wie Sie sich richtig formatieren einer Zelle date, und füllen Sie Inhalte mit Apache POI 3.7

Ich habe das Gefühl, durch ein Missverständnis, wie Excel speichert Formate und Inhalte, und wäre dankbar jede Hilfe zur Verfügung gestellt.

Frage:

So, wie kann ich das richtig formatieren/füllen Sie die Zelle so, dass Microsoft Excel behandelt es als Datum und VLOOKUPs Arbeit etc?

Update: Wenn ich öffnen Sie die resultierende Datei in Open Office Calc und wählen Sie " Zellen Formatieren... das format korrekt als Datum. Ab zu Fragen, dann ist dies ein Problem mit der POI-Bibliothek und Excel 2007...

Vielen Dank.

  • Für Ihre SVERWEIS zu arbeiten, die Zellen zu enthalten, die eine Zeit von 00:00 Uhr was können Sie tun, durch die Rundung nach unten das Datum (=ROUNDDOWN(ZELLE; 0)). Ändern Sie das format (in Excel) auf dd-mm-yy wird sich nicht ändern, deren Werte (d.h. die Zeit wird ausgeblendet, aber immer noch da), nicht sicher über POI.
  • So gibt es keine Möglichkeit zu tun, einen SVERWEIS auf ein datetime? Auch, wenn ich ersetzen Sie den ersten parameter der SVERWEIS mit einem Zellbezug auf die Spalte, es immer noch nicht überein?
  • Es ist. Aber SVERWEIS suchen nach einer genauen übereinstimmung (wenn der Letzte parameter ist auf false gesetzt) und dein argument "2012/01/31" ist nicht gleich "31/01/2012 14:34" so müssen Sie zum anpassen einer von Ihnen. Wenn Sie den letzten parameter von SVERWEIS ist wahr, dann sucht nach der nächsten übereinstimmung, die möglicherweise oder möglicherweise nicht, was Sie brauchen.
  • Danke für Eure Hilfe! Ich habe das Gefühl das ist der Tipp mit dem SVERWEIS Eisbergs! Was ist, wenn ich dies tun: =SVERWEIS("31/01/2012 14:34" A2:G20", 7, FALSE) mit FALSE oder TRUE am Ende bekomme ich die #N/A Fehler. Ist das, weil der Wert, den es sucht muss mit dem cell format? Warum würde das nicht funktionieren?
  • Sie können zum Beispiel mit =SVERWEIS(DATUM(2012,1,31)+ZEIT(14,34,0),A2:G20", 7,FALSE), (vorausgesetzt, Sekunden sind 0) oder =SVERWEIS(H1,xxxx) angenommen, H1 enthält das Datum+die Zeit, die Sie suchen
  • Versuchen getBuiltinFormat("m/d/yy"). In Excel ist dies das einzige DATUM-format, das nicht betroffen ist durch die system-locale, so dass das Datum der Arbeit unabhängig.

InformationsquelleAutor ndtreviv | 2012-02-24
Schreibe einen Kommentar