Ich verwende Apache POI seit einiger Zeit, um vorhandene Excel 2003-Dateien programmgesteuert zu lesen. Jetzt habe ich eine neue Anforderung, ganze XLS-Dateien im Speicher zu erstellen (immer noch mit Apache POI) und sie am Ende in eine Datei zu schreiben. Das einzige Problem, das mir im Weg steht, ist der Umgang mit Zellen mit Datumsangaben.
Betrachten Sie den folgenden Code:
Date myDate = new Date();
HSSFCell myCell;
// code that assigns a cell from an HSSFSheet to 'myCell' would go here...
myCell.setCellValue(myDate);
Wenn ich die Arbeitsmappe mit dieser Zelle in eine Datei schreibe und sie mit Excel öffne, wird die Zelle als Zahl angezeigt. Ja, mir ist klar, dass Excel seine "Daten" als Anzahl der Tage seit dem 1. Januar 1900 speichert und genau diese Zahl in der Zelle darstellt.
FRAGE: Welche API-Aufrufe kann ich in POI verwenden, um anzugeben, dass ein Standard-Datumsformat auf meine Datumszelle angewendet werden soll?
Idealerweise soll die Tabellenkalkulationszelle mit demselben Standard-Datumsformat angezeigt werden, das Excel zugewiesen hätte, wenn ein Benutzer die Tabelle manuell in Excel geöffnet und einen Zellenwert eingegeben hätte, den Excel als Datum erkannt hat.
quelle
BuiltinFormats
, die alle Standardformate (nicht nur Datumsformate) auflistet, die Excel kennt. Ich halte mich an eine davon, die ich als Parameter für diegetFormat()
im obigen Snippet gezeigte Methode verwenden möchte.getCreationHelper()
benötigt wird? Ich arbeite gerade mit Mule zusammen, um eine Excel-Ausgabedatei zu generieren. Tatsächlich konnte ich diecreateDataFormat()
ohne den Erstellungshelfer verwenden und in meinem Test eine Excel-Datei generieren. Gibt es einen Nachteil, wenn man es nicht benutzt? Vielen Dank!mm/dd/yyyy
. Wenn ich ein anderes Format verwende, zeigt das Excel einen Fehler anFile error, some number formats may have been lost
, es zeigt denDate
Typ in Excel an. Ich habe keine Ahnung, wie dies behoben werden kann.Um den Standard-Excel-Typ Datum festzulegen (standardmäßig das Gebietsschema auf Betriebssystemebene / -> dh xlsx sieht anders aus, wenn es von einer deutschen oder britischen Person geöffnet wird / und mit einem Sternchen gekennzeichnet wird, wenn Sie es in der Zellenformatauswahl von Excel auswählen), sollten Sie:
Ich habe es mit xlsx gemacht und es hat gut funktioniert.
quelle
Dieses Beispiel dient zum Arbeiten mit XLSX-Dateitypen. Dieses Beispiel stammt von einer .jsp-Seite, die zum Erstellen einer .xslx-Tabelle verwendet wird.
quelle
Ich schreibe meine Antwort hier, weil sie für andere Leser hilfreich sein kann, die möglicherweise eine etwas andere Anforderung haben als der Fragesteller hier.
Ich bereite eine XLSX-Vorlage vor. Alle Zellen, die mit Datumsangaben gefüllt werden, sind bereits als Datumszellen formatiert (mit Excel).
Ich öffne die XLSX-Vorlage mit Apache POI und schreibe dann einfach das Datum in die Zelle, und es funktioniert.
Im folgenden Beispiel ist Zelle A1 bereits in Excel mit dem Format formatiert
[$-409]mmm yyyy
, und der Java-Code wird nur zum Auffüllen der Zelle verwendet.Beim Öffnen von Excel wird das Datum korrekt formatiert.
quelle
Mit diesem Codebeispiel kann das Datumsformat geändert werden. Hier möchte ich von JJJJ-MM-TT zu TT-MM-JJJJ wechseln. Hier
pos
ist die Position der Spalte.quelle
So kennen Sie die von Excel verwendete Formatzeichenfolge, ohne sie erraten zu müssen: Erstellen Sie eine Excel-Datei, schreiben Sie ein Datum in Zelle A1 und formatieren Sie es nach Ihren Wünschen. Führen Sie dann die folgenden Zeilen aus:
Kopieren Sie dann die resultierende Zeichenfolge, fügen Sie sie ein, entfernen Sie die Backslashes (z. B.
d/m/yy\ h\.mm;@
wirdd/m/yy h.mm;@
) und verwenden Sie sie im Code http://poi.apache.org/spreadsheet/quick-guide.html#CreateDateCells :quelle