[python-users] excel scripten vortrag

Günter Jantzen guenter.jantzen at gmx.de
Fr Mär 6 23:08:54 CET 2009


Am Mittwoch, den 04.03.2009, 18:02 +0100 schrieb Thomas Lenarz:
> Reimar Bauer schrieb:
> > ich erinner mich das ein Vortrag ueber excel scripten aus python
> > angeboten wurde.
> Hi Reimar,
> Günter und ich haben letztens telefoniert. Er hatte mir von den 
> Excel-Modulen erzählt (siehe Links von Rebecca). Ich glaube(!) ;-) 
> Günter wollte auch gerne einen Vortrag darüber halten.
> 
Worüber ich erzählen wollte, war leider nicht genau Reimars
Fragestellung. Ich deute mal kurz und kryptisch an: 
Es geht um die Frage, wie ändert man bestehende Excel Dateien ab. Mit
xlrd und xlwt ist das nicht immer praktisch. Man muss alles, inklusive
Formatinfos:

1.rauslesen
2.ändern 
3.wegschreiben. 

Eine Alternative ist com, die einzige Möglichkeit Excel-Dateien direkt
zu ändern. Das geht aber nur unter MS Windows, und ist keine reine
Dateiverarbeitung mehr. 

Mittlerweile gibt es auch xlutils, das auf xlrd und xlwt aufsetzt.
Interessant ist xlutils.filter.

Der Ansatz von xlutils.filter ist so eine Art Fließbandverarbeitung:
Im Beispiel, ganz am Schluss mit process() wird zuerst was eingelesen.
Dann folgen beliebig viele Filter, die nacheinander Veränderungen
vornehmen. Zum Schluss wird weggeschrieben.

Das Beipiel ist eine Abwandlung der Doku und von irgenwelchen Dingen aud
dem Internet. Um das Beispiel laufen zu lassen, sind die drei Pakete zu
installieren (gibt es bei www.python.org/pypi)
Eine Beispiel Excel-Datei ist unter dem Namen "something.xls" im
Arbeitsverzeichnis ablegen. Sie sollte ein paar Zeilen und Spalten
Zahlen, Text und unterschiedliche Formatierungen enthalten,

Im Beispiel gibt es zwei Filter:
MyPrintFilter
gibt Logausgaben aus

MyFilter 
fügt in jedem Arbeitsblatt ganz rechts neben die 
letzte Spalte eine Kopie ein und ändert Integer Werte ab (sie werden um
eins erhöht). 

Die Filter werden in der angegebenen Reihenfolge abgearbeitet (Ein
Filter reicht eigentlich schon, dann ist es aber ein kurzes Fließband).
Das Ergebnis wird als 'filtered_something.xls' abgelegt. Mann kann auch
richtig viele Dateien im Batchlauf verarbeiten.

Die Filter schreibt man selber, durch Abänderung von Basisklassen
Im Hintergrund passiert Eventverarbeitung. Ereignisse sind z.B.
Neue Excel-Datei - workbook
Neues Arbeitsblatt - sheet
Neue Zelle         - cell
Die Ereignisse werden in einer bestimmten Reihenfolge ausgelöst.
Das führt dann zum Aufruf zum Beispiel aller cell Methoden für alle
möglichen Zellen. Bei einem Aufruf von cell wird das Staffelholz
angenommen und durch Aufruf von self.next.cell weitergegeben.
Parameter beziehen sich auf Eingangskoordinaten rdrowx,rdcolx 
und Ausgangskoordinaten wtrowx,wtcolx.

Um von Koordinaten auf Zellen des aktuellen Arbeitsblatts zuzugreifen
wird rdsheet verwendet:
            cell = self.rdsheet.cell(rdrowx,rdcolx)

Mit der Zelle cell.value hat man auch ihren Wert und andere Attribute,
wie zum Beispiel Zugriff auf das Format cell.xf_index
 
Das aktuelle Arbeitsblatt lässt sich mit self.rdsheet.put_cell ändern
Im Beispiel werden neue Zellen eingefügt:
self.rdsheet.put_cell(wtrowx, wtcolx, cell.ctype, value, cell.xf_index)
 

Schauts euch ruhig mal an.
xlutils ist nicht riesig, sondern eine schmale aber wirkungsvolle
Abstraktionsschicht. Beim Blättern in den Sourcen bekommt man schnell
einen Eindruck. 

Dann gibt es auch noch eine Diskussionsgruppe
http://groups.google.com.au/group/python-excel


Viel Spaß
Günter   

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : filter_demo.py
Dateityp    : text/x-python
Dateigröße  : 1771 bytes
Beschreibung: nicht verfügbar
URL         : <http://lists.uni-koeln.de/pipermail/python-users/attachments/20090306/6e8ad3e6/attachment.py>


Mehr Informationen über die Mailingliste python-users