2009-06-08 7 views
4

Ich versuche, einige Excel-Blätter in Java-Anwendung mit Hilfe von JExcelAPI (v. 2.6.3) zu generieren und kann nicht korrekt Datenzellen generieren. Zum Beispiel für den Code ein:JExcelAPI - Datum in Excel-Tabelle schreiben ignoriert Tag, Monat und Jahr

WritableWorkbook workbook = null; 
    workbook = Workbook.createWorkbook(new File("C:\\tmp\\tests.xls")); 
    try { 
     Date date = new Date(); 
     final WritableSheet sheet = workbook.createSheet("Sheet", 0); 
     DateTime dateTime = new DateTime(0, 0, date); 
     sheet.addCell(dateTime); 
     System.out.println("Date1 is " + date); 
     final Calendar cal = Calendar.getInstance(); 
     cal.set(Calendar.YEAR, 2007); 
     cal.set(Calendar.MONTH, Calendar.OCTOBER); 
     cal.set(Calendar.DAY_OF_MONTH, 17); 
     cal.set(Calendar.HOUR_OF_DAY, 8); 
     cal.set(Calendar.MINUTE, 15); 
     date = cal.getTime(); 
     dateTime = new DateTime(0, 1, date); 
     sheet.addCell(dateTime); 
     System.out.println("My birthday is on " + date); 
    } finally { 
     workbook.write(); 
     workbook.close(); 
    } 

Der Ausgang (auf Konsole) ist:
Date1 ist Mo 8. Juni 11.14.45 GMT + 01: 00 2009
Mein Geburtstag ist am Mi 17. Oktober 08 : 15: 45 GMT + 01: 00 2007

Und in Excel die Zellen
1900-01-00 10:14:46
1900-01-00 07:15:46

Datei

Der Zeitteil in Excel wird in UTC korrigiert und der Datumsteil wird verworfen. Während in der Referenz das Zeitzonenproblem erwähnt wird, sagt es nichts über das Verwerfen von Daten. Was mache ich falsch?

Antwort

6

OK. Ich hab's mir gedacht. Erstellen von Datumsformat

DateFormat customDateFormat = new DateFormat ("dd MMM yyyy hh:mm:ss"); 
WritableCellFormat dateFormat = new WritableCellFormat (customDateFormat); 

und weitergeben zu Datetime-Konstruktor

DateTime dateTime = new DateTime(0, 0, date, dateFormat); 

behebt es. Es scheint, dass standardmäßig nur der Zeitteil genommen wird. Entschuldigung für meine Dummheit.

+0

Fügen Sie keine neue Antwort hinzu. Bearbeiten Sie Ihr Original. – duffymo

+1

oder akzeptieren Sie diese Antwort, um klarzustellen, dass Sie das Problem herausgefunden haben –

+0

Sie haben gerade mein sehr ähnliches Problem gelöst :) –

0

POI ist nicht die Antwort, die ich empfehlen würde. JExcel kann es verwalten. Ich sehe nicht, wo Sie den Typ für diese Zelle festgelegt haben. Schauen Sie sich DateFormats an.

Das Problem ist das gleiche, wenn Sie Excel verwenden. Wenn Sie ein Datum in eine Zelle eingeben, für die dieses Format nicht festgelegt ist, haben Sie ein unerwartetes Verhalten.

+0

Ich habe eine WritableCell vom Typ jxl.write.DateTime erstellt. Ich erwartete, dass es den richtigen Typ (wie jxl.write.Number Typ auf Nummer setzt) ​​festgelegt. Aber es scheint, dass ein DateFormat auch benötigt wird. Ich dachte, es kontrolliert nur die Anzeige, aber es beeinflusst auch, welcher Teil von java.util.Date geschrieben wird. –

Verwandte Themen