[Python-de] VBA oder Python (via win32com o.ä.) besser für Excel-File Operationen?

Mike Müller mmueller at python-academy.de
Fr Jan 4 13:34:33 CET 2013


Am 04.01.13 12:52, schrieb Yu-Fang Helena Wang:
> Hallo Experten-Forum,
> 
> ich müsste in nächster Zeit einiges mit Excel-Files machen. Da würde sich VBA
> anbieten, wenn man MS- und windows-nah ist. Ist jetzt nur bedingt der Fall. Ich
> finde Python netter, aber wichtig ist, dass ich mit dem Tool meiner Wahl
> _alles_ erledigt bekomme, und nicht nur eine Teilaufgabe. Lt. Google gibt es
> folgende Optionen:
> 
> 1) Python über Modul win32com (geht das mit Python 3.3?)

win32com ist Bestandteil von pywin32 und für Python 3.3 verfügbar:
http://pypi.python.org/pypi/pywin32/214

> 2) Python-Module xlrd, xswt von python-excel.org <http://python-excel.org>

Die (xlrd, xlwt) gehen nur für Exceldateien im Format 2003 und früher (binär).
Für Exceldateien im Format 2007 (XML, *.xlsx) gibt es OpenPyxl:
http://pypi.python.org/pypi/openpyxl/1.6.1
Lässt sich mit pip in Python 3.3 installieren.

> 3) VBA.

> 
> Die Aufgaben gehen so in diese Richtung:
> - nur Spalten mit bestimmten Namen aus einer vorgegebenen Tabelle extrahieren
> - Spaltennamen (1. /oberster Eintrag) farblich markieren
> 
> Komplizierter sollte das hier werden:
> 
> - die Inhalte einer neuen Tabelle mit einer alten Tabelle via Gleichheit eines
> bestimmten Namens abgleichen, also: guck in Spalte A beider Tabellen nach
> Einträgen, die in beiden Tabellen in Spalte A vorkommen, und übernimm jeweils
> bestimmte Zelleninhalte der Einträge (wirf andre dafür weg). Wenn z.B. in
> beiden A-Spalten der alten und neuen Tabelle der Wert "123" auftaucht, soll der
> Zelleninhalt "Kommentar" der alten Tabelle behalten werden, aber bestimmte
> andere Spaltenwerte der neuen Tabelle sollen die alten dennoch überschreiben.
> 
> In welcher Sprache macht man das am komfortabelsten, hat da einer von euch
> Erfahrung? Ich frage mich insbesondere, ob die Module xlrd, xlwt nicht von
> win32com subsumiert werden bzw. ob letzteres nicht eh schon leistungsfähiger ist?
> 
> Ich verwende hier auf dem Arbeits-Notebook Windows 7 Enterprise und hab mir
> vorgestern Python3.3. installiert. VBA ist ja in Excel2007 (das ist
> installiert) ja auch schon inkludiert.

xrd kann nur Lesen und xlwt nur Schreiben. D.h. man muss die Datei immer
vollständig neu schreiben. OpenPyxl kann auch eine bestehende Datei
modifizieren. Macht das Ganze wahrscheinlich einfacher.

Generell gilt: Mit win32com lässt das gesamte Objektmodell vom Excel nutzen.
Also alles was mit Tastatur und Maus in Excel-GUI geht lässt sich auch
programmieren. Allerdings ist das Objektmodell recht groß und es braucht
doch einigen Lernaufwand. OpenPyxl ist nicht so leistungsfähig dafür aber
leichter zu erlernen. Ob damit wirklich alles geht was in der Aufgabeanstellung
steht müsste man im Detail erkunden. Es könnte hier oder da was fehlen z.B.
bei Kommentaren (wenn es in der Aufgabenstellung um Zellkommentare geht).

Viele Grüße
Mike


Mehr Informationen über die Mailingliste python-de