Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

229 views
Skip to first unread message

Yu-Fang Helena Wang

unread,
Jan 4, 2013, 6:52:45 AM1/4/13
to Python-de Forum, Python Googlegroup
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?)
2) Python-Module xlrd, xswt von python-excel.org
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.

Herzlichen Dank vorab für eure Antworten. Wird mir viel Ausprobieren ersparen, vermutlich.

Grüße

Aigredouce alias Sweetsour




Massa, Harald Armin

unread,
Jan 4, 2013, 7:30:21 AM1/4/13
to Yu-Fang Helena Wang, Python-de Forum, Python Googlegroup
Hallo!

> 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.

Mehr wird da auf der python-excel mailingliste diskutiert, da gibt es
noch mehr helfende!

> 1) Python über Modul win32com (geht das mit Python 3.3?)
> 2) Python-Module xlrd, xswt von python-excel.org
> 3) VBA.

Recht gute Summierung. AUßER:

-> die Steuerung von Excel über COM (ist bestimmt noch unter mehreren
Marketing-Bezeichnungen verfügbar) ist aus jeder Sprache möglich, die
COM ansteuern kann. Python ist da halt eine davon.

Zusätzlich gibt es noch für C# / als .net Module Libraries, um .xltx
und soweiter zu schreiben. Die Berichte dazu klangen anstrengend,
weshalb ich die Versuche, das mit pythondotnet zu realisieren wieder
auf "irgendwann" priorisiert habe.

Vor und Nachteile der Methoden:

1.) Ansteuerung über COM. Darüber ist das Gros der
Excel-Funktionalität erreichbar. Das Vorgehen ist: starte
programmgesteuert ein Excel, gebe über eine
Programm-nach-Programm-Schnittstelle Befehle an Excel.

Konsequenz: es muß Excel verfügbar sein. In diversen Dokumentationen
seitens Microsoft sind auch Hinweise zu finden, daß Microsoft Excel
für die Interaktive Verwendung gemacht ist; es für die
programmgesteurte Nutzung keine Garantie oder Support gibt (wieweit es
erlaubt ist, frage drei Anwälte für 6 Meinungen )

Vorteil: Es geht fast alles.
Nachteil: Wenn Excel blockiert, blockiert es. (z.B. "drücken Sie eine
Taste, weil Verknüpfung nach ZZZ nicht greifbar ist")
Die Rückmeldungen wenn etwas nicht möglich ist (zu lange Zeichenkette
in Zelle eingetragen; Falsche Kodierung, Objekt exisitert so nicht)
sind ... nur manchmal verstehbar; oft generische Fehler.

2.) Ansteuerung über XLRD / XLWT. Da wird das Excel Format geparsed,
und ebenso Excel-Format geschrieben. Für Listen ist das perfekt und
richtig schnell. Formatierungen sind begrenzt möglich. Themen wie
Pivots, Autofilter, Ausblenden von Spalten, Automatische Spaltenbreite
sind teils nicht möglich, teils richtig anstrengend. Makro-Aufrufe
gehen gar nicht.

Vorteile: kein Excel notwendig, extrem schnell
Nachteile: Begrenzte Funktionalität. Aktuell nur für .xls verfügbar;
xltx in Ankündigungen

3.) Ansteuerung über VBA. Damit geht noch ein wenig mehr als über COM
- einige Elemente des Objekt Modells sind per COM nicht oder nur so
fehlerhaft greifbar, daß es unsinnig ist.

Vorteil: Teil von Excel. Größter Funktionsumfang
Nachteile: Weniger elegante Sprache (verglichen mit Python). Makros IN
Excel-Arbeitsmappen gespeichert, z.B. Versionsverwaltung nur schwierig
möglich; korrumpierte Excel-Mappen nehmen Makros teils mit in den
Orcus.


Meine Erfahrung:

a) wenn xlrd / xlwt für das Problem reichen, damit arbeiten. Grade zum
Einlesen und Schreiben von Listen, die eigentlich als .csv besser
aufgehoben wären, sind die super gut. Ne fettgedruckte Überschrift
geht damit auch noch.

b) wenn Design und Grafiken gefragt sind, Vorlagen in Excel fertigen,
per COM öffnen und per COM befüllen. Datenerzeugung in Python.

Mit b) habe ich seit 2000 Erfahrungen, mit a) seit rund 5 Jahren.


Mit VBA-Programmierung habe ich mir schon die Finger verbrannt.

Bester GRuß

Harald





--

GHUM GmbH
Harald Armin Massa
Spielberger Straße 49
70435 Stuttgart
0173/9409607

Amtsgericht Stuttgart, HRB 734971

Mike Müller

unread,
Jan 4, 2013, 7:34:33 AM1/4/13
to pyth...@python.org
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

Yu-Fang Helena Wang

unread,
Jan 4, 2013, 8:30:12 AM1/4/13
to mmue...@python-academy.de, Python-de Forum
Hallo Mike, hallo Harald,

vielen Dank für eure schnellen Antworten!! Also nachdem ich abgewogen habe: die größten Möglichkeiten inn. Python bietet das Modul win32com, muss mich aber einarbeiten,
danach käme OpenPyxl, kann aber sein, dass ich damit nicht alles realisiert bekomme, was ich brauche.
Hm. Ich nehm dann doch erstmal VBA, und gucke, wie weit ich damit komme bzw. wie lange ich es damit aushalte :-|

Viele Grüße,
suesssauer



_______________________________________________
python-de maillist  -  pyth...@python.org
http://mail.python.org/mailman/listinfo/python-de

Wolfgang Keller

unread,
Jan 4, 2013, 3:52:23 PM1/4/13
to
> 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.

VBA ist für "Teilaufgaben" außerhalb der MS-Welt naturgemäß unbrauchbar.
D.h. wenn Du z.B. aus Excel etwas "herausziehen" und extern
weiterverarbeiten willst, sitzt Du mit VBA auf dem Trockenen.

U.a. aus genau diesem Grund habe ich auch für MS-Produkte für Skripte
immer nur Python per COM benutzt und VBA gar nicht erst gelernt.

Darüber hinaus hat man in VBA keine interaktive Kommandozeile. Die
genau das ist, was man zum Skriptschreiben nunmal braucht.

MfG,

Wolfgang
0 new messages