2014-09-17 1 views
6

Ich verwende derzeit xlwt ziemlich erfolgreich, um .xls-Dateien zu erstellen. Ich lerne auch xlsxwriter für mögliche zukünftige Anwendungen, wo ich einige seiner Funktionen benötigen werde.xlsxwriter und xlwt: Schreiben einer Liste von Zeichenfolgen in eine Zelle

xlwt schreibt reibungslos Listen von Strings in Zellen.

z.B.

import xlwt 
a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 
book = xlwt.Workbook() 
sheet = book.add_sheet('Test') 
sheet.write(0,0,a) 
book.save('Test.xls') 

Öffnen Sie die Datei Test.xls, aktivieren Wrap Text, und die Zelle A1 zeigt:

January 
February 
March 
April 
May 
June 

Ich habe versucht, etwas Ähnliches mit xlsxwriter

import xlsxwriter 
xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 
xsheet.write(0,0,a) 

hier zu tun, erhalte ich eine langwierige Fehlermeldung mit dem Ergebnis

...anaconda/lib/python2.7/site-packages/xlsxwriter/worksheet.pyc in write(self, row, col, *args) 
    416   # We haven't matched a supported type. Try float. 
    417   try: 
--> 418    f = float(token) 
    419    if not self._isnan(f) and not self._isinf(f): 
    420     return self.write_number(row, col, f, *args[1:]) 

TypeError: float() argument must be a string or a number 

Ich habe andere xlsxwriter Schreibmethoden ausprobiert und alle geben grob ähnliche Fehler.

Weitere Forschung: Ich habe diese Website ziemlich gründlich durchsucht. Ich habe auch das ausgezeichnete xlsxwriter PDF durchgesehen und die xlsxwriter Github Seiten überprüft. Bisher bin ich auf nichts gestoßen, was dies angeht.

Noch einmal, xlwt ist jetzt in Ordnung, ich erwarte, dass ich in naher Zukunft Diagramme und Sparklines hinzufügen und xlsx-Dateien erstellen muss.

Danke,

The Old Guy In The Club

+1

Verwenden Sie einfach ' "" .join (a) 'anstelle von' a' wenn 'isinstance (a, list) == True '. –

+0

Das ist genau das, was ich brauche. Ich kann die Antwort nicht akzeptieren, da es kein Kontrollkästchen gibt ... – OldGuyInTheClub

Antwort

2

Nein, können Sie einen list Typ xlsxwrite.write() mit nicht schreiben.

Überprüfen Sie die docs

Falls keine der oben genannten Typen den Wert angepasst werden, wird mit Schwimmer() ausgewertet, um zu sehen, ob es auf einen benutzerdefinierten float-Typ entspricht. Wenn es tut, dann wird es mit write_number() geschrieben.

Deshalb sollten Sie den Fehler TypeError: float() argument must be a string or a number

dies zu beheben versuchen, die list zu einem string Umwandlung, wie von Paulo Scardine (in den Kommentaren) vorgeschlagen:

import xlsxwriter 
a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 
xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 
xsheet.write(0,0,''.join(a)) 
3

Die write() Methode in XlsxWriter unterstützt keine Listen.

Sie können Listen schreiben mit dem Arbeitsblatt write_row() Methode:

import xlsxwriter 

a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 

xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 

xsheet.write_row(0, 0, a) 

xbook.close() 

P. S. Diese Ausnahme ist in diesem Fall nicht sehr hilfreich und wird in der nächsten Version behoben.Hier ist die Ausnahme von Ihrem Beispielprogramm mit der Version von XlsxWriter auf GitHub:

TypeError: Unsupported type <type 'list'> in write() 
+0

Ich habe das als Teil meiner anfänglichen Experimente mit jeder der write_ Methoden versucht. Dies brachte jedes Element der Liste in eine separate Zelle (wie von den Dokumenten erwartet). Die ".join" -Methode setzt alle Zeichenfolgen in eine Zelle, was ich für eine aktuelle Anwendung tun muss. Ich hoffe, es ist keine schlechte Form, Ihre Bemühungen bei der Erstellung dieses Pakets anzuerkennen. – OldGuyInTheClub

+0

Whoops, tut mir leid. Ich habe verpasst, dass du sie alle in einer Zelle haben wolltest. In diesem Fall ist das oben gezeigte 'join()' eine bessere Option. – jmcnamara

+0

In diesem Fall benötigen Sie möglicherweise auch das Format [wrap_text] (https://xlsxwriter.readthedocs.org/format.html?#format-set-text-wrap). Und nein, es war keine schlechte Form. :-) – jmcnamara

2

Ich habe durch ein ähnliches Problem zu arbeiten.

konnte das gewünschte Ergebnis erzielen, indem der Index jedes Strings in der Liste zu bekommen mit aufzählen und dann als beide nebenbei, dass die Reihe Referenz und das Datenelement .WRITE:

import xlsxwriter 

a = ['January\n','February\n','March\n','April\n','May\n','June\n'] 

xbook = xlsxwriter.Workbook('Test.xlsx') 
xsheet = xbook.add_worksheet('Test') 

for idx, month in enumerate(a): 
    xsheet.write(idx,0,a[idx]) 

xbook.close() 
Verwandte Themen