2013-06-12 21 views
9

Ich verwende Xlwt, um eine .xls-Tabelle zu erstellen, und ich muss Datenzellen erstellen.Schreiben xlwt Daten mit Excel 'Datum' Format

Ich habe Zahlen geschrieben, und die Zahlenformatzeichenfolge so eingestellt, dass sie wie Daten aussehen, aber kritisch werden sie nicht wirklich als Daten geschrieben - wenn Sie Zellen in Excel formatieren, ist es eine "benutzerdefinierte" Kategorie und nicht ein "Datum", und das ist wichtig.

Kann ich xlwt tatsächlich schreiben "Datum" -Zellen?

Antwort

17

Die Nummer wird in der Excel "Date" Kategorie angezeigt, wenn Sie einen Format-String verwenden, die einer Excel entspricht Built-in Formatzeichenfolgen wie dd/mm/yyy. zum Beispiel:

import xlwt 
import datetime 

workbook = xlwt.Workbook() 
worksheet = workbook.add_sheet('Sheet1') 

date_format = xlwt.XFStyle() 
date_format.num_format_str = 'dd/mm/yyyy' 

worksheet.write(0, 0, datetime.datetime.now(), date_format) 

workbook.save('date_format.xls') 

Wenn Sie dieses Beispiel ändern, um ein Format-String von d/mm/yyy dann der Nummer verwenden wird in der „Custom“ Kategorie angezeigt.

Hinweis: Der obige Code funktioniert für die Version von Excel, die ich versucht, aber es ist möglich, dass diese regionalen Schwankungen unterworfen ist. Am besten formatieren Sie eine Zahl in Excel mit dem gewünschten Format "Datum" und klicken Sie dann im selben Dialogfeld auf "Benutzerdefiniert", um zu sehen, welche Formatzeichenkette dem Format "Datum" zugeordnet ist. Dann benutze das in deinem Programm.

Auch: Im Excel XLS-Format ist kein nativer Datentyp vorhanden. Alle Daten werden als Zahlen plus ein Format gespeichert. Es gibt nichts, um sie von einer anderen Zahl mit einem Format zu unterscheiden, mit Ausnahme der Formatzeichenfolge. Dies ist eines der Dinge, die das Parsen einer Excel-Datei zu einem Problem machen, da Sie Heuristiken anwenden müssen, um zu bestimmen, ob eine Zelle ein Datum enthält.

+0

Danke, das ist es. – xorsyst

+1

+1 für das Beispiel, aber es sollte hinzugefügt werden, dass nur eine ISO-Format-Zeichenfolge wie "2014-01-23" wird * nicht * wie erwartet konvertieren (Format wird Datum sein, aber Inhalt wird eine nutzlose Textzeichenfolge sein) ; Die Verwendung des tatsächlichen datetime() -Objekts vermeidet dieses Problem. Ich habe dies nicht mit einer umfassenden ISO-Zeichenfolge wie "2014-01-23T12: 34: 56" getestet, die noch funktionieren könnte - jemand anders sollte hier eine Notiz hinterlassen, wenn sie diese kennen. – Ryder

+0

@RyderDain Der Titel der Frage ist irreführend und sollte wahrscheinlich bearbeitet werden. Die Frage, die Antwort und das Beispiel beziehen sich darauf, wie man mit "xlwt" Datenformate im Vergleich zu benutzerdefinierten Formaten erzeugt. Das Erstellen des tatsächlichen Datums wird nicht besprochen. – jmcnamara

3

Von http://www.youlikeprogramming.com/2011/04/examples-generating-excel-documents-using-pythons-xlwt/

Eingabe eines Datums in eine Zelle

 

import xlwt 
import datetime 
workbook = xlwt.Workbook() 
worksheet = workbook.add_sheet('My Sheet') 
style = xlwt.XFStyle() 
style.num_format_str = 'D-MMM-YY' # Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0 
worksheet.write(0, 0, datetime.datetime.now(), style) 
workbook.save('Excel_Workbook.xls') 
 
+0

Danke, aber das ist, was ich schon mache, und es funktioniert nicht richtig, wie meine Frage. – xorsyst

+0

Es wurde versucht, das Zellenformat in 'Allgemein' zu ändern. Die erwartete Fließkommazahl erhalten. In das Format "Datum" geändert und das korrekte Datum angezeigt. Gibt es einen bestimmten Grund, warum es wichtig ist? – shantanoo

+0

Ja, es funktioniert, aber ich fürchte, es ist wichtig, dass es das Datum an erster Stelle ist. Ich kann hier nur vage sein und "Anforderungen" sagen. – xorsyst

Verwandte Themen