Onkel SES modernisiert die VBA-App mit Python

Einführung

Dies ist eine Geschichte über einen kundenresidenten SES-Onkel, von dem oft gesagt wird, dass er Wakusaku ähnlich ist, der eine alte ACCESS VBA-Anwendung auf Python portiert hat.

image.png

Onkel SES Spezifikationen

Ein Ingenieur im Finanzbereich. Ich habe alles getan, von kleinen EUCs bis hin zu Backbones und Paketen, aber vielleicht habe ich EUCs am längsten in der Nähe von Benutzern gemacht. Alter, das mir Sorgen um alte Augen macht.

Wie bist du zu Python gekommen?

Es gab zwei Gründe, warum ich angefangen habe, an Python zu arbeiten: Erstens hat der Kundenmitarbeiter, der neben der Site saß, Python normal ausgeführt. Diese Person scheint an einer ausländischen Universität Informatik studiert zu haben, und ich betrachtete es von der Seite mit einem Gefühl von "erstaunlich". Darüber hinaus lernen andere Mitarbeiter, die keine Ingenieure sind, im Rahmen ihrer Schulung Python, und diese Personen stellen Fragen. Also konnte ich natürlich nicht antworten. Es ist so, als würde man den Wassergraben um sich herum füllen, oder man spürt den Fluss der Zeit. Gehen Sie danach zu PyCon und hören Sie sich Geschichten wie Python-Verwendungsbeispiel an. tat.

Dann möchte ich es bei der Arbeit verwenden.

Was ich versucht habe zu tun

Die Entwicklung und der Administrator einer bestimmten Anwendung beim Kunden werden Jobs geändert. Also wollte ich das von Grund auf neu erstellen und fragte, ob ich es vorschlagen könnte.

Die Anwendung ist eine ACCESS / VBA-Anwendung, die verschiedene Berichte ausgibt (Format ist Excel / CSV) und diese per E-Mail an verschiedene Orte sendet. Sie wird seit mehr als 10 Jahren ausgeführt. VBA verfügt über einen integrierten Mechanismus wie ein Job Scheduler und wird automatisch betrieben. Ich habe übrigens auch beim Betrieb der Anwendung geholfen.

Zuerst dachte ich über einige plattformähnliche Alternativen zu ACCESS nach, aber keine davon schien schwer und lang zu passen. Wie ich bereits erwähnte, hatte das Unternehmen, in dem ich lebte, nicht-technische Mitarbeiter dazu ermutigt, Python zu verwenden. Als ich vorschlug, Python zu verwenden, wurde ich leicht akzeptiert. Die Person, die die Site organisiert, wies auf die Besorgnis hin, dass ".NET die Hauptsache hier ist, aber ich bin ein wenig besorgt, wenn andere Leute es pflegen", aber "Wenn Python verwendet werden kann, kann das Spektrum der Technologie erweitert werden. Ist es nicht? " Es war auch das Ziel, nicht-technischen Leuten zu ermöglichen, es in Zukunft zu warten.

Was ist damit passiert

Zunächst versammelten sich die betroffenen Parteien, um eine Bestandsaufnahme der Funktionen vorzunehmen, und schafften dann einige der Funktionen ab oder übertrugen sie. Für andere wesentliche Funktionen haben wir beschlossen, jedes Element (Datenbank / Formulare / VBA) der aktuellen Versionsplattform ACCESS zu modernisieren.

Anstelle von VBA

Python 3.7

python-logo@2x.png

Die neueste Version zu Beginn der Entwicklung.

Die Hauptbibliotheken sind wie folgt. --OpenPyXl: Wird für die Ausgabeverarbeitung von Artefakten verwendet. --pandas: Wird für die Aggregationsverarbeitung verwendet. Dies ist möglicherweise bequemer als das Aggregieren mit SQL.

Der Editor ist VS Code. Ich fand das besser als das ursprüngliche Visual Studio.

** Ein kleines Problem mit Excel **

Sie können beim Speichern einer Excel-Datei aus Python kein Kennwort festlegen. Natürlich hat Microsoft die Spezifikationen für den Sicherheitsteil nicht veröffentlicht, sodass Sie einer Excel-Datei nur aus einer Originalanwendung ein Kennwort zuweisen können. Da hierfür keine Hilfe verfügbar ist, habe ich eine Excel-Instanz von PowerShell aufgerufen, ein Kennwort auf die Excel-Zieldatei angewendet und es durch Überschreiben gespeichert. Übrigens muss jede Instanz (Sheet, Workbook, Applicaton) explizit freigegeben werden, wenn die Excel-Instanz beendet wird. Warum?

Instanz nach dem Beenden von Excel freigeben

$sheet, $wb, $excel | ForEach-Object {
    if ($_ -ne $null) {
        [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($_)
    }
}

Anstelle von Datenbank (Jet DB)

SQLite3

image.png

Obwohl Oracle als Kerndatenbank in diesem Bereich verwendet wurde, wird die zu migrierende Anwendung (Datenbank) nicht von anderen referenziert oder aktualisiert, und es besteht kein Grund zur Sorge um die Skalierung. Daher habe ich mich für diese entschieden. Die Bibliothek ist standardmäßig in Python enthalten. Notwendig und ausreichend als Alternative zur ACCESS-Datenbank (Jet DB).

Anstelle von MS Forms

DataTables

image.png

PyQt ist schwer, deshalb habe ich mich für das Web entschieden. Daher habe ich mich für eine JavaScript-Bibliothek namens DataTables entschieden, weil ich dachte, es wäre schön, eine tabellenähnliche Benutzeroberfläche als Datenreferenz zu haben. Viel einfacher zu bedienen und anzuzeigen als der ACCESS-Tabellenbildschirm. Es scheint eine Update-Funktion zu geben, die ich diesmal jedoch nicht verwendet habe.

Ich hatte jedoch ein kleines Problem mit JavaScript. Ich dachte, es wäre für den Front-End-Ingenieur schwierig, beim Entwerfen mit JavaScript zu kämpfen.

** Webserver **

Da es keinen Entwicklungsserver gibt, leiht der Webserver IIS aus, der sich in der Abteilung befand.

Die Brücke zwischen SQLite und dem Web (DataTables) ist eine REST-API! Ich war begeistert, aber anscheinend kann ich ASP überhaupt nicht verwenden. Die Daten in SQLite werden in regelmäßigen Abständen in eine JSON-Datei ausgegeben und von IIS an den Browser zurückgegeben. Hier ist es etwas rau, aber es gibt kein Problem in Bezug auf die Benutzerfreundlichkeit. Ich möchte mich hier verbessern, wenn ich noch Zeit habe (derjenige, der es nie tut).

Wie war es

Python macht Spaß.

Sie können einfach schreiben, was Sie tun möchten. Ich denke fast nie, dass es ein Ärger ist. Die meiste Zeit wünschte ich mir, ich hätte eine solche Bibliothek.

Die Produktivität ist also gut.

Dieses Mal, zu Beginn der Entwicklung, hatte ich die Geschäfts- und Funktionsspezifikationen fast verstanden, und es gab fast keinen Entwurfsprozess, also fühle ich mich so.

Daher kann der Ausdruck "stört nicht" statt "gute Produktivität" dem tatsächlichen Gefühl näher kommen.

Ich möchte Python weiterhin verwenden, wenn ich eine Chance habe!

Dinge zu beachten

In diesem Requests-HTML-Blogbeitrag heißt es: "Die Bibliothek selbst leistet nicht viel Arbeit, sondern konzentriert sich auf das Kombinieren vorhandener Bibliotheken." Nachdem ich einen Satz gelesen hatte, versuchte ich, die vorhandene Bibliothek so gut wie möglich zu nutzen. Je weniger Sie schreiben, desto kürzer ist der Test. Dies ist möglicherweise nicht auf Python beschränkt.

Im Vergleich zu anderen Sprachen verfügt Python über zu viele Bibliotheken und es ist schwierig, selbst die wichtigsten zu erfassen. Ich denke, es gibt einige Stellen, an denen ich den Teil nicht verwenden konnte, z. B. "Ich wünschte, ich könnte diese Bibliothek hier verwenden" oder die Bibliothek selbst. Insbesondere bei Datenklassen können Sie diese möglicherweise nicht gut verwenden.

Ärger

Immerhin der Ort, an dem der Typ der Variablen nicht explizit deklariert werden kann. Ich habe Typanmerkungen verwendet, um mit mypy zu prüfen, aber ich habe immer noch typbezogene Ausnahmen. Ich gehe davon aus, dass sich die Genauigkeit von mypy in Zukunft weiter verbessern wird. Schreiben Sie bis dahin einen Komponententest. Ich hoffe, dass es eines Tages so etwas wie TypePython wie TypeScript geben wird.

Ich habe auch SQLite RUNDEN von Zahlen, um Fehler zu erhalten verwendet, aber ich habe versucht, numerische Berechnungen und Aggregationen zu vermeiden, indem ich Pandas so weit wie möglich verwendet habe.

Und Warum ist Python so langsam? Ich war ein wenig besorgt über die Leistung, aber es ist selten ein Problem im EUC-Bereich. Ich denke, ich werde es tun, und tatsächlich war es diesmal nicht wirklich wichtig (vielmehr hatte mein Schreibstil einen großen Einfluss auf die Verarbeitungsleistung).

Was ist passiert

Die Implementierungsphase ist vorbei, und zu diesem Zeitpunkt sollte es parallel zur ACCESS-Version laufen und in die Überprüfungsphase eintreten, aber es steckt aufgrund dieser Korona-Katastrophe fest ... (Also schreibe ich diesen Artikel)

Was wird von nun an passieren?

Es wird oft gesagt, dass es tödliche Routineaufgaben auf der Welt gibt, die Sie automatisieren möchten, und EUC-Anwendungen, die niemand warten muss.

Es gibt einige Leute und Nicht-Ingenieure, die sich für Python interessieren, und ich gehe davon aus, dass Nicht-Ingenieure ihre Verwendung von Python in Zukunft schrittweise verstärken werden.

Durch diese Kombination wird die Anzahl solcher Arbeitsplätze wie Bestandsaufnahme bestehender EUCs, Arbeitsersparnis und Modernisierung weiter zunehmen, wenn auch in geringem Umfang, und es wird kein Unternehmen geben, in dem Ingenieure solche Arbeitsplätze unterstützen. Ich frage mich, ob.

Recommended Posts

Onkel SES modernisiert die VBA-App mit Python
Führen Sie Python mit VBA aus
Gemeinsamer Bildschirm mit Python Exe App
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Einfache Web-App mit Python + Flask + Heroku
Erstellen Sie eine englische Wort-App mit Python
Senden Sie eine E-Mail mit Amazon SES + Python
Erstellen Sie eine Desktop-App mit Python mit Electron
Othello App (iOS App) erstellt mit Python (Kivy)
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Erstellen Sie eine App, die Schüler mit Python errät
Scraping mit Python
Gewinnen Sie die Python + Flask-Web-App mit Jenkins
Twilio mit Python
GUI-Automatisierung mit Python x Windows App Driver
In Python integrieren
Spielen Sie mit 2016-Python
AES256 mit Python
Getestet mit Python
Lesen Sie den Excel-Namen / Zellbereich mit Python VBA
Python beginnt mit ()
mit Syntax (Python)
Bingo mit Python
Zundokokiyoshi mit Python
Excel mit Python
Mikrocomputer mit Python
Mit Python besetzen
Führen Sie Python aus Excel VBA mit xlwings & Tutorial Supplement aus
[Übung] Erstellen Sie eine Watson-App mit Python! # 2 [Übersetzungsfunktion]
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
PIL in Python unter Windows8 (für Google App Engine)
Erste Schritte mit Google App Engine für Python und PHP
Serielle Kommunikation mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python
Datenanalyse mit Python 2
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Python lernen mit ChemTHEATER 03
"Objektorientiert" mit Python gelernt
Umgang mit Yaml mit Python
Löse AtCoder 167 mit Python
Serielle Kommunikation mit Python
[Python] Verwenden Sie JSON mit Python
Python lernen mit ChemTHEATER 05-1
Lerne Python mit ChemTHEATER
Führen Sie prepDE.py mit python3 aus
1.1 Erste Schritte mit Python
Tweets mit Python sammeln
Binarisierung mit OpenCV / Python
3. 3. KI-Programmierung mit Python
Kernel-Methode mit Python
Nicht blockierend mit Python + uWSGI
Scraping mit Python + PhantomJS
Tweets mit Python posten
Fahren Sie WebDriver mit Python