Xmas
2003-10-27, 01:12:40
Hola,
ich habe folgendes Problem:
Ich habe ein Python-Programm, das eine gewisse Anzahl (150+) an Listen bestimmter Wörter produzert. Eine solche Liste kann z.B. so aussehen:
[ "Text", "Zahl", "-", "Zahl" "." "Satz" ]
[ "Zahl", "Datum", "Nr", "Zahl" ]
Die Anzahl möglicher Wörter ist recht begrenzt, ca. 30. Um nun die visuelle Analyse dieser Sequenzen zu erleichtern, will ich diese in Tabellenform darstellen, so dass jedes Wort in einer Zelle steht und eine bestimmte vom Wort abhängige Hintergrundfarbe hat. Also kam mir natürlich Excel in den Sinn. Leider kann ich nun z.B. mit CSV keine Farben angeben, also dachte ich mir, dass ich Excel als COM-Server gebrauche, ein Workbook/Worksheet erstelle und darauf die Zellen direkt verändere. Der Code dazu sieht folgendermaßen aus:
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Visible = 0
xlWb = xlApp.Workbooks.Add()
xlSheet = xlApp.ActiveSheet
row = 1
for toliindex in xrange(0, len(totalist)):
# ...
column = 2
for tok in tolilist[toliindex]:
xlSheet.Cells(row, column).Value = tok
if tok in colordict.keys():
xlSheet.Cells(row, column).Interior.ColorIndex = colordict[tok]
column += 1
row += 1
xlApp.Visible = 1
try:
xlWb.SaveAs(os.path.join(os.curdir, "tabelle.xls"))
except:
pass
xlApp.Quit()
del xlApp
Das funktioniert auch, ist aber übelst langsam. Der "inner loop", also das Zuweisen von Farbe und Wert zur Zelle kriecht geradezu. Wenn ich Visible vorher schon auf 1 setze, kann ich dem Ausfüllen der Zellen geruhsam zuschauen.
Kann mir jemand sagen ob man das einigermaßen beschleunigen kann, oder auch einen anderen Weg verraten, wie man die Zellen färben kann?
ich habe folgendes Problem:
Ich habe ein Python-Programm, das eine gewisse Anzahl (150+) an Listen bestimmter Wörter produzert. Eine solche Liste kann z.B. so aussehen:
[ "Text", "Zahl", "-", "Zahl" "." "Satz" ]
[ "Zahl", "Datum", "Nr", "Zahl" ]
Die Anzahl möglicher Wörter ist recht begrenzt, ca. 30. Um nun die visuelle Analyse dieser Sequenzen zu erleichtern, will ich diese in Tabellenform darstellen, so dass jedes Wort in einer Zelle steht und eine bestimmte vom Wort abhängige Hintergrundfarbe hat. Also kam mir natürlich Excel in den Sinn. Leider kann ich nun z.B. mit CSV keine Farben angeben, also dachte ich mir, dass ich Excel als COM-Server gebrauche, ein Workbook/Worksheet erstelle und darauf die Zellen direkt verändere. Der Code dazu sieht folgendermaßen aus:
xlApp = win32com.client.Dispatch("Excel.Application")
xlApp.Visible = 0
xlWb = xlApp.Workbooks.Add()
xlSheet = xlApp.ActiveSheet
row = 1
for toliindex in xrange(0, len(totalist)):
# ...
column = 2
for tok in tolilist[toliindex]:
xlSheet.Cells(row, column).Value = tok
if tok in colordict.keys():
xlSheet.Cells(row, column).Interior.ColorIndex = colordict[tok]
column += 1
row += 1
xlApp.Visible = 1
try:
xlWb.SaveAs(os.path.join(os.curdir, "tabelle.xls"))
except:
pass
xlApp.Quit()
del xlApp
Das funktioniert auch, ist aber übelst langsam. Der "inner loop", also das Zuweisen von Farbe und Wert zur Zelle kriecht geradezu. Wenn ich Visible vorher schon auf 1 setze, kann ich dem Ausfüllen der Zellen geruhsam zuschauen.
Kann mir jemand sagen ob man das einigermaßen beschleunigen kann, oder auch einen anderen Weg verraten, wie man die Zellen färben kann?