VBA oder Python (via win32com o.ä.) besser für Excel-File Operationen?
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
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
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
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 Am 4. Januar 2013 13:34 schrieb Mike Müller <mmueller@python-academy.de>:
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 _______________________________________________ python-de maillist - python-de@python.org http://mail.python.org/mailman/listinfo/python-de
participants (3)
-
Massa, Harald Armin -
Mike Müller -
Yu-Fang Helena Wang