Der Grund für den Hinweis war ein Artikel über Habré, in dem der Autor beschrieb, wie er in Python die Aufgabe des Sammelns und Analysierens von Metadaten aus Excel-Dateien löste .
Dieser Hinweis enthüllt detaillierter die bekannte These: Für eine bestimmte Aufgabe müssen Sie das am besten geeignete Werkzeug für die Büroautomatisierung auswählen .
VBA und Python
VBA (Visual Basic für Applikationen) ist de facto die beliebteste Sprache zur Automatisierung von Microsoft Office. Zusätzlich zu Excel ist es in der Box verfügbar und funktioniert in PowerPoint, Outlook, Access, Project und anderen Anwendungen.
Wenn Sie die Frage stellen: "Welche Programmiersprache soll zuerst gewählt werden?", Wird in 90% aller Fälle Python angeboten. In der Praxis kann es jede andere Sprache geben, aber basierend auf der Popularität der Sprache und meiner Erfahrung werde ich sie vergleichen.
Im Allgemeinen können Sie die Situation anhand eines ähnlichen Zeitplans beschreiben:

Es wird keinen detaillierten Vergleich geben. Berücksichtigen Sie die wichtigsten Killerfunktionen in einer Situation, in der ein Junior-Programmierer / Büroangestellter etwas im Zusammenhang mit MS Office automatisieren möchte und die Möglichkeit hat, zwischen Sprachen zu wählen.
Wenn es aus verschiedenen Gründen keine Wahl gibt, gibt es nichts zu vergleichen.
Für VBA

- Hervorragende Arbeit mit dem Objektmodell von Excel und anderen MS Office-Anwendungen . Das Schreiben von VBA-Code für die meisten internen Vorgänge ist trivial. In Python ist die Unterstützung für das Office-Objektmodell im Vergleich zu VBA sehr schwach.
- Unterstützung für verschiedene Formate von MS Office. Das größte Problem für externe Sprachen ist die Arbeit mit verschiedenen MS Office-Dateiformaten. Beispielsweise erfordern xls-, xlsx- und xlsm-Dateien möglicherweise unterschiedliche Bibliotheken, da jede nur mit ihrem eigenen Dateiformat gut funktioniert. Für VBA ist dies alles eine "Excel-Datei", die im Allgemeinen gleich gut funktioniert.
- Arbeiten Sie mit MS Exchange. Wenn in Exchange die Arbeit mit Unternehmenspost / -kalender bereitgestellt werden muss, verfügt nicht jede Sprache über eine normale Bibliothek für die Arbeit mit dem Exchange-Protokoll. In VBA wird dies relativ einfach durch die Verwendung des MS Outlook-Objektmodells in einem Makro gelöst.
- Einfache Installation und Verteilung. In einem bereits installierten Büro muss nichts installiert werden. Damit ein Kollege das Programm verwenden kann, reicht es aus, ihm eine Datei mit einem Makro zu übertragen. Es ist einfach, ein Add-In hinzuzufügen, mit dem Sie ein Makromodell im Office-Hintergrund „installieren“ können.
- Interaktivität in MS Office-Anwendungen. In Office-Programmen können Sie einfach Schaltflächen zum Starten von Makros einfügen und (etwas komplizierter) eine separate Benutzeroberfläche erstellen. Dazu gehört auch das Schreiben Ihrer Formeln in Excel und die Tatsache, dass Makros Objekte in Office-Dokumenten in Echtzeit beeinflussen können.
- Makroaufnahme. Ein praktisches Tool, mit dem Sie die Aktionen einer Person im fertigen Code für die spätere Bearbeitung aufzeichnen können.
Für Python (und andere externe Programmiersprachen)

- Schöne Syntax und syntaktischer Zucker. Kurz gesagt, VBA ist nicht ausdrucksstark und bequem. Dies ist eine Frage des persönlichen Geschmacks, aber Python ist für mich viel bequemer.
- Ein reiches Ökosystem an Bibliotheken. Eine riesige Auswahl an vorgefertigten Bibliotheken für die Arbeit mit der Außenwelt. Der Versuch, ein Programm auf VBA zu erstellen, das mit einer externen API interagiert, ist immer noch ein Problem. Es ist interessant, dass nur für die Arbeit mit Office-Dateien der Bibliothek des gleichen Python - ehrlich gesagt "im C".
- Gute Entwicklungswerkzeuge. Sie können aus einer großen Auswahl an Programmen auswählen, die den Entwicklungsprozess erleichtern. Der Standard-VBA-Editor von Office bietet eine sehr schlechte Funktionalität und ist im Vergleich zu Alternativen aus der Python-Welt offen gesagt unpraktisch. Das Schreiben von VBA-Code in einem externen Editor und das anschließende Kopieren im Büro zum Debuggen ist ebenfalls unpraktisch.
- Arbeitsgeschwindigkeit. Ich habe die Geschwindigkeit von Single-Threaded-Arbeiten nicht überprüft, gehe aber davon aus, dass Python bei Single-Threaded-Arbeiten einen Vorteil hat. In jedem Fall ist die Multithread-Verarbeitung von Daten / Dateien recht trivial organisiert, sodass Sie mit einer höheren erreichbaren Geschwindigkeit sprechen können.
Fälle

Im Folgenden sind bestimmte Aufgaben aufgeführt, die ich selbst gelöst oder automatisiert habe und bei denen ich einen Stapel auswählen musste: VBA oder Python. Für jede Aufgabe wird der ausgewählte Stapel angezeigt und es werden Erklärungen gegeben, warum:
- Aufgabe: Ein Programm zum Überprüfen aller Excel-Dateien in einem Verzeichnis auf versteckte Blätter
- Meine Wahl: VBA . Gründe: Einfache Arbeit mit verschiedenen Excel-Dateiformaten und fehlende externe Interaktionen.
- Ziel: Ein Dienst, mit dem ein Benutzer PowerPoint-Dateien von einem mobilen Gerät zur Anzeige in PDF konvertieren konnte
- Der Dienst wurde als E-Mail-Bot implementiert, an dessen Adresse der Benutzer Office-Dateien senden kann, und eine Antwort mit PDF-Dateien wird per E-Mail an den Benutzer gesendet.
- Meine Wahl: VBA + Python-Logik zur Überwachung
- Erstens wird durch interne Funktionen garantiert, dass eine PDF-Datei erhalten bleibt, die für eine PowerPoint-Datei authentisch ist (externe Bibliotheken funktionieren schlecht mit PowerPoint-Rendering).
- Zweitens löste die Implementierung des Mail-Bots als Makro in MS Outlook die Probleme bei der Arbeit mit Exchange-Unternehmensmail. In Python gibt es also keine normale Bibliothek für die Arbeit mit MS Exchange.
- Python wurde verwendet, um die Überwachung des Dienstes und die Benachrichtigung über mögliche Probleme zu organisieren.
- Aufgabe: Ein Programm zum Kombinieren von Powerpoint-Dateien mit "interlinear" (Sprechertext) zu einer Druckdatei
- Meine Wahl: VBA . Das Problem wurde gelöst, indem zwei Dateien in PDF konvertiert und mit Riffle Shuffle kombiniert wurden. Da die Qualität der Konvertierung in PDF wichtig ist, wurden die integrierten Office-Funktionen zum Exportieren in PDF verwendet.
- Aufgabe: Bei einer Datenbank von Industrieunternehmen in Form von Karten separate HTML-Dateien, die gefiltert und zu einer Excel-Datei kombiniert werden müssen, um eine Reihe von Indikatoren zu berechnen.
- Meine Wahl: Python .
- Um Daten von HTML-Karten abzurufen, war eine Bibliothek zum Parsen von HTML BeautifulSoup hilfreich.
- Das Programm erstellt die Excel-Datei, sodass wir selbst entscheiden können, welche Analysen darin berechnet werden sollen und welche in der Datenvorbereitungsphase in Python.
- Aufgabe: Übersetzen Sie den gesamten Text in einer PowerPoint-Präsentation von einem maschinellen Übersetzer in eine andere Sprache
- Meine Wahl: VBA . Es war wichtig, sorgfältig mit dem Text in den internen Objekten der PowerPoint-Datei zu arbeiten. Die Yandex-API wurde für die Übersetzung verwendet, da sie für kleine Volumes kostenlos und einfach zu verbinden ist. Zum Beispiel konnte ich die Bing-Übersetzer-API nicht in VBA zum Laufen bringen, da ich dort OAuth mit meinen Problemen benötige. Wenn ich mit Bing arbeiten müsste, würde ich wahrscheinlich einen Service-Vermittler in Python machen.
- Aufgabe: Nehmen Sie für bestimmte Börsenticker Daten aus der API mit Finanzindikatoren (die API gibt eine auf Anfrage generierte CSV-Datei aus) und lesen Sie eine Reihe von Benchmarks zur Analyse auf deren Grundlage
- Meine Wahl: Python . Obwohl die API einfach ist (keine Signierung von Anforderungen oder Autorisierung erforderlich ist) und Daten an CSV ausgibt, wird Python ausgewählt, da es keinen Grund gibt, VBA zu wählen, und es bequemer ist, in Python zu schreiben.
- Aufgabe: Pflegen einer Anweisungsbasis, Versenden von Benachrichtigungen an die ausübenden Künstler, Erstellen eines Berichts zum Drucken
- Hier habe ich mich sehr lange entschieden, da es viele Alternativen gibt:
- Fertiges Bestellsystem von Drittanbietern
- Datenbank mit einer Art Handler
- Zugang
- Excel
- Meine Wahl: VBA
- Erstens ist Excel selbst eine vorgefertigte Benutzeroberfläche für die Arbeit.
- Zweitens löst VBA das Problem der Arbeit mit Corporate Exchange über eine MS Outlook-Verbindung.
- Drittens wurde diese Entscheidung mit Blick auf Kollegen getroffen, denen Excel klarer war als alles völlig Neue
Fazit
Ich hoffe, dass die Notiz für jemanden nützlich ist und Zeit bei der Auswahl eines Stapels spart, um seine Probleme zu lösen.