Uncle SES modernise l'application VBA avec Python

introduction

Il s'agit d'une histoire à propos d'un oncle SES résident client, qui est souvent dit être similaire à Wakusaku, qui a porté une ancienne application ACCESS VBA sur Python.

image.png

Spécifications de l'oncle SES

Ingénieur dans le domaine financier. J'ai tout fait, des petits EUC aux backbones et aux packages, mais peut-être que je fais des EUC depuis le plus longtemps près des utilisateurs. L'âge qui m'inquiète pour les vieux yeux.

Comment avez-vous commencé avec Python?

J'ai commencé à travailler sur Python pour deux raisons: premièrement, l'employé client qui était assis à côté du site faisait Python normalement. Cette personne semble s'être spécialisée en informatique dans une université étrangère, et je la regardais de côté avec un sentiment "incroyable". En outre, d'autres employés non ingénieurs étudient également Python dans le cadre de leur formation, et ces personnes posent des questions. Alors, bien sûr, je ne pouvais pas répondre. C'est un peu comme remplir les douves autour de vous, ou vous pouvez sentir le flux du temps. Ensuite, allez dans PyCon et écoutez des histoires telles que Exemples d'utilisation de Python. fait.

Ensuite, je veux l'utiliser au travail.

Ce que j'ai essayé de faire

Le développement et l'administrateur d'une certaine application sur le site du client seront des emplois modifiés. Je voulais donc le reconstruire à partir de zéro, alors j'ai demandé si je pouvais le suggérer.

L'application est une application ACCESS / VBA qui produit différents rapports (format Excel / CSV) et les envoie à divers endroits par e-mail, et fonctionne depuis plus de 10 ans. VBA a un mécanisme intégré comme un planificateur de travaux et est automatiquement exploité. Au fait, j'ai également aidé au fonctionnement de l'application.

Au début, j'ai envisagé des alternatives de type plateforme à ACCESS, mais aucune d'entre elles ne semblait convenir. Comme je l'ai mentionné plus tôt, l'entreprise dans laquelle je résidais avait encouragé les employés non techniques à utiliser Python, alors quand j'ai suggéré d'utiliser Python, j'ai été facilement accepté. La personne qui organise le site a fait remarquer que ".NET est la chose principale ici, mais je suis un peu inquiet quand d'autres personnes le maintiennent", mais "plutôt, si Python peut être utilisé, la gamme de la technologie peut être élargie. N'est-ce pas? " L'objectif était également de permettre à des personnes non techniques de le maintenir à l'avenir.

Qu'est-ce qui lui est arrivé

Tout d'abord, les parties concernées se sont réunies pour faire le point sur les fonctions, et certaines fonctions ont été supprimées ou transférées. Pour d'autres fonctions essentielles, nous avons décidé de moderniser chaque élément (Base de données / Formulaires / VBA) de la plateforme de la version actuelle, ACCESS.

Au lieu de VBA

Python 3.7

python-logo@2x.png

La dernière version au début du développement.

Les principales bibliothèques sont les suivantes. --OpenPyXl: utilisé pour le traitement de sortie des artefacts. --pandas: utilisé pour le traitement d'agrégation. Cela peut être plus pratique que l'agrégation avec SQL.

L'éditeur est VS Code. Je pensais que c'était mieux que le Visual Studio original.

** Un petit problème avec la gestion d'Excel **

Vous ne pouvez pas définir de mot de passe lors de l'enregistrement d'un fichier Excel à partir de Python. Bien sûr, Microsoft n'a pas publié les spécifications pour la partie sécurité, vous ne pouvez donc pas mettre de mots de passe sur des fichiers Excel à partir d'autres applications que de véritables applications. Comme il n'y a pas d'aide pour cela, j'ai appelé une instance Excel à partir de PowerShell et appliqué un mot de passe au fichier Excel cible et l'ai enregistré par écrasement. À propos, il est nécessaire de libérer explicitement chaque instance (feuille, classeur, application) lorsque l'instance Excel est terminée. Pourquoi?

#Release instance après avoir quitté Excel $sheet, $wb, excel | ForEach-Object { if (_ -ne null) { [void][System.Runtime.Interopservices.Marshal]::ReleaseComObject(_) } }

Au lieu de la base de données (Jet DB)

SQLite3

image.png

Bien qu'Oracle ait été utilisé comme base de données principale sur le terrain, l'application (base de données) à migrer n'est pas référencée ou mise à jour par d'autres, et il n'y a pas besoin de s'inquiéter de l'échelle, j'ai donc choisi cela. La bibliothèque est incluse dans Python par défaut. Nécessaire et suffisant comme alternative à la base de données ACCESS (Jet DB).

Au lieu de MS Forms

DataTables

image.png

PyQt est lourd, j'ai donc choisi le Web. J'ai donc décidé d'utiliser une bibliothèque JavaScript appelée DataTables parce que je pensais que ce serait bien d'avoir une interface utilisateur semblable à une feuille de calcul pour la référence des données. Beaucoup plus facile à utiliser et à visualiser que l'écran du tableau ACCESS. Il semble y avoir une fonction de mise à jour, mais je ne l'ai pas utilisée cette fois.

Cependant, j'ai eu un petit problème avec JavaScript. J'ai pensé qu'il serait difficile pour l'ingénieur front-end de lutter avec JavaScript lors de la conception.

** Serveur Web **

Puisqu'il n'y a aucun serveur de développement, le serveur Web emprunte IIS qui était dans le département.

Le pont entre SQLite et le Web (DataTables) est une API REST! J'étais enthousiaste, mais apparemment, je ne peux pas utiliser ASP en premier lieu. Les données de SQLite sont générées dans un fichier JSON à intervalles réguliers et renvoyées d'IIS au navigateur. C'est un peu difficile ici, mais il n'y a pas de problème en termes de convivialité. Je veux m'améliorer ici s'il me reste du temps (celui qui ne le fait jamais).

Comment était-ce

Python est amusant.

Vous pouvez simplement écrire ce que vous voulez faire. Je ne pense presque jamais que ce soit un problème. La plupart du temps, j'aurais aimé avoir une bibliothèque comme celle-ci.

La productivité est donc bonne.

Cette fois, au début du développement, j'avais presque compris les spécifications métier et fonctionnelles, et il n'y avait presque pas de processus de conception, donc je pense que c'est ainsi.

Par conséquent, l'expression «ne dérange pas» plutôt que «bonne productivité» peut être plus proche du sentiment réel.

Je veux continuer à utiliser Python si j'ai une chance!

Choses à garder à l'esprit

Dans ce billet de blog Requests-HTML, "La bibliothèque elle-même ne fait pas beaucoup de travail, mais se concentre sur la combinaison des bibliothèques existantes." Après avoir lu une phrase, j'ai essayé d'utiliser au mieux la bibliothèque existante. Moins vous écrivez, plus le test est court. Cela peut ne pas être limité à Python.

Comparé à d'autres langages, Python a trop de bibliothèques et il est difficile de saisir même les principales. Je pense qu'il y a pas mal d'endroits où je n'ai pas pu utiliser la partie telle que "J'aimerais pouvoir utiliser cette bibliothèque ici" ou la bibliothèque elle-même. Surtout autour des dataclasses, vous ne pourrez peut-être pas bien les utiliser.

difficulté

Après tout, l'endroit où le type de la variable ne peut pas être explicitement déclaré. J'ai utilisé des annotations de type pour vérifier avec mypy, mais j'ai toujours des exceptions liées au type. J'espère que la précision de mypy s'améliorera davantage à l'avenir. Jusque-là, rédigez un test unitaire. J'espère qu'un jour il y aura quelque chose comme TypePython comme TypeScript.

J'ai également utilisé SQLite ROUNDing numbers to get errors, mais j'ai essayé d'éviter les calculs numériques et les agrégations en utilisant autant que possible des pandas.

Et, Pourquoi Python est-il si lent? J'étais un peu inquiet pour les performances, mais c'est rarement un problème dans la zone EUC. Je pense que je vais le faire, et en fait cela n'avait pas vraiment d'importance cette fois (plutôt, mon style d'écriture avait un grand impact sur les performances de traitement).

Qu'est-il arrivé

La phase de mise en œuvre est terminée, et à ce moment-là, il était censé fonctionner en parallèle avec la version ACCESS et entrer dans la phase de vérification, mais il est bloqué à cause de ce désastre corona ... (J'écris donc cet article)

Que se passera-t-il à partir de maintenant

On dit souvent qu'il existe des tâches de routine mortelles dans le monde que vous souhaitez automatiser et des applications EUC qui n'ont personne à gérer.

Il y a des personnes et des non-ingénieurs qui s'intéressent à Python, et je pense que les non-ingénieurs augmenteront progressivement leur utilisation de Python à l'avenir.

En combinant ces derniers, le nombre d'emplois tels que l'inventaire des CUE existants, les économies de main-d'œuvre et la modernisation continuera d'augmenter, quoique à petite échelle, et il n'y aura aucune entreprise dans laquelle les ingénieurs soutiendront ces emplois. Je me demande si.

Recommended Posts

Uncle SES modernise l'application VBA avec Python
Exécutez Python avec VBA
Écran partagé avec l'application python exe
Démonisez une application Web Python avec Supervisor
Application Web facile avec Python + Flask + Heroku
Créez une application de mots anglais avec python
Envoyer un e-mail avec Amazon SES + Python
Créez une application de bureau avec Python avec Electron
Application Othello (application iOS) réalisée avec Python (Kivy)
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Créez une application qui devine les étudiants avec Python
Grattage avec Python
Gagnez l'application Web Python + Flask avec Jenkins
Twilio avec Python
Automatisation de l'interface graphique avec le pilote d'application Python x Windows
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
Lire le nom / la plage de cellules Excel avec Python VBA
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Exécutez Python à partir d'Excel VBA avec xlwings et un supplément de tutoriel
[Pratique] Créez une application Watson avec Python! # 2 [Fonction de traduction]
[Pratique] Créez une application Watson avec Python! # 1 [Discrimination linguistique]
J'ai créé une application de notification de nouvelles en ligne avec Python
PIL en Python sur Windows8 (pour Google App Engine)
Premiers pas avec Google App Engine pour Python et PHP
Communication série avec Python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
"Orienté objet" appris avec python
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
Exécutez prepDE.py avec python3
1.1 Premiers pas avec Python
Collecter des tweets avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Publier des tweets avec python
Conduisez WebDriver avec python