VBA et Python pour Excel et MS Office Automation

La raison de cette note était un article sur Habré, dans lequel l'auteur décrivait comment il avait résolu en Python la tâche de collecter et d'analyser des métadonnées à partir de fichiers Excel .


Cette note révèle plus en détail la thèse bien connue: Pour une tâche spécifique, vous devez choisir l'outil le plus approprié applicable à la bureautique.


VBA et Python


VBA (Visual Basic pour Applications) , de facto, le langage le plus populaire pour automatiser Microsoft Office. Disponible depuis la boîte, en plus d'Excel, il fonctionne dans PowerPoint, Outlook, Access, Project et d'autres applications.


Si vous posez la question: «Quel langage de programmation choisir en premier», alors quelque part dans 90% des cas, Python sera proposé. Dans la pratique, il peut y avoir n'importe quelle autre langue, mais, en fonction de la popularité de la langue et de mon expérience, je vais comparer avec elle.


En général, vous pouvez décrire la situation à travers un calendrier similaire:



Il n'y aura pas de comparaison détaillée, considérez les principales caractéristiques de tueur dans une situation où un programmeur junior / employé de bureau veut automatiser quelque chose lié à MS Office, et il a la possibilité de choisir entre les langues.


Si, pour diverses raisons, il n'y a pas de choix, il n'y a rien à comparer.


En faveur de VBA



  • Excellent travail avec le modèle objet d'Excel et d'autres applications MS Office . L'écriture de code VBA pour la plupart des opérations internes est triviale. En Python, par rapport à VBA, la prise en charge du modèle d'objet Office est très faible.
  • Prise en charge de divers formats de MS Office. Le plus gros problème pour les langues externes est de travailler avec différents formats de fichiers MS Office. Par exemple, les fichiers xls, xlsx, xlsm peuvent nécessiter des bibliothèques différentes, car chacune ne fonctionne bien qu'avec son propre format de fichier. Pour VBA, tout cela est un "fichier Excel" qui fonctionne aussi bien en général.
  • Travailler avec MS Exchange. S'il est nécessaire de fournir du travail avec le courrier / calendrier d'entreprise sur Exchange, toutes les langues ne disposent pas d'une bibliothèque normale pour travailler avec le protocole Exchange. Dans VBA, cela est résolu relativement simplement grâce à l'utilisation du modèle d'objet MS Outlook dans une macro.
  • Installation et distribution faciles. Il n'est pas nécessaire d'installer quoi que ce soit dans un bureau déjà installé. Pour qu'un collègue utilise le programme, il suffit de lui transférer un fichier avec une macro. Il est facile d'ajouter un complément qui vous permet «d'installer» un modèle de macro en arrière-plan du bureau.
  • Interactivité dans les applications MS Office. Dans les programmes de bureau, vous pouvez simplement mettre des boutons de lancement de macro et (un peu plus compliqué) créer une interface utilisateur entièrement distincte. Cela inclut également l'écriture de vos formules dans Excel et le fait que les macros peuvent affecter les objets dans les documents Office en temps réel.
  • Enregistrement de macro. Un outil pratique qui vous permet d'enregistrer les actions d'une personne dans le code fini, pour une utilisation d'édition ultérieure.

En faveur de Python (et d'autres langages de programmation externes)



  • Belle syntaxe et sucre syntaxique. En bref, VBA n'est pas expressif et pratique. C'est une question de goût personnel, mais Python est beaucoup plus pratique pour moi.
  • Un riche écosystème de bibliothèques. Une vaste sélection de bibliothèques prêtes à l'emploi pour travailler avec le monde extérieur. Essayer de créer un programme sur VBA qui interagit avec une API externe est toujours un problème. Il est intéressant de noter que juste pour travailler avec des fichiers Office de la bibliothèque du même Python - franchement "dans le C".
  • De bons outils de développement. Vous pouvez choisir parmi une vaste sélection de programmes qui facilitent le processus de développement. L'éditeur VBA standard d'Office offre des fonctionnalités très médiocres et, par rapport aux alternatives du monde Python, est franchement gênant. Écrire du code VBA dans un éditeur externe, puis le copier à l'intérieur du bureau pour le débogage, est également gênant.
  • Vitesse de travail. Je n'ai pas vérifié la vitesse du travail monothread, mais je suppose que dans le cas du travail monothread, Python aura un avantage. Dans tous les cas, le traitement multithread des données / fichiers est assez trivialement organisé, ce qui vous permet de parler à une vitesse plus élevée et réalisable.

Étuis



Les tâches suivantes sont des tâches spécifiques que j'ai moi-même résolues ou automatisées, et lorsque j'ai dû choisir une pile: VBA ou Python. Pour chaque tâche, la pile sélectionnée est indiquée et des explications sont données pour expliquer pourquoi:


  • Tâche: Un programme pour vérifier tous les fichiers Excel dans un répertoire pour les feuilles cachées
    • Mon choix: VBA . Motifs: simplicité de travail avec différents formats de fichiers Excel et absence d'interactions externes.
  • Objectif: Un service qui était censé permettre à un utilisateur de convertir des fichiers PowerPoint en PDF à partir d'un appareil mobile pour les visualiser
    • Le service a été implémenté comme un bot de messagerie, à l'adresse à laquelle l'utilisateur peut envoyer des fichiers Office, et une réponse avec des fichiers PDF est envoyée à l'utilisateur par courrier.
    • Mon choix: logique VBA + Python pour la surveillance
      • Premièrement, les fonctions internes sont garanties pour préserver un PDF authentique pour un fichier PowerPoint (les bibliothèques externes fonctionnent mal avec le rendu PowerPoint).
      • Deuxièmement, l'implémentation du bot de messagerie en tant que macro dans MS Outlook a résolu les problèmes de travail avec le courrier Exchange d'entreprise. Donc, en Python, il n'y a pas de bibliothèque normale pour travailler avec MS Exchange.
      • Python a été utilisé pour organiser la surveillance du service et la notification d'éventuels problèmes.
  • Tâche: Un programme pour combiner des fichiers Powerpoint avec "interlinéaire" (texte du locuteur) dans un fichier d'impression
    • Mon choix: VBA . Le problème a été résolu en convertissant deux fichiers au format PDF et en les combinant avec Riffle Shuffle. Étant donné que la qualité de la conversion au format PDF est importante, les fonctions de bureau intégrées ont été utilisées pour exporter au format PDF.
  • Tâche: à partir d'une base de données d'entreprises du secteur sous forme de fiches, séparer les fichiers html qui doivent être filtrés et combinés en 1 fichier Excel pour calculer un certain nombre d'indicateurs.
    • Mon choix: Python .
      • Pour extraire des données de cartes html, une bibliothèque pour analyser html BeautifulSoup était utile.
      • Le programme crée le fichier Excel, afin que nous puissions nous-mêmes décider quelles analyses y calculer, et lesquelles au stade de la préparation des données en Python.
  • Tâche: traduire tout le texte d'une présentation PowerPoint dans une autre langue par un traducteur automatique
    • Mon choix: VBA . Il était important de travailler soigneusement avec le texte dans les objets internes du fichier PowerPoint. L'API Yandex a été utilisée pour la traduction, car elle est gratuite pour les petits volumes et facile à connecter. Par exemple, je n'ai pas pu faire fonctionner l'API du traducteur Bing dans VBA, car j'ai besoin d'OAuth avec mes problèmes pour fonctionner. Si je devais travailler avec Bing, je ferais probablement un intermédiaire de service en Python.
  • Tâche: pour des titres boursiers donnés, prendre des données de l'API avec des indicateurs financiers (l'API émet un fichier CSV généré à la demande) et lire un certain nombre de références pour l'analyse sur leur base
    • Mon choix: Python . Bien que l'API soit simple (elle ne nécessite aucune signature de demandes ou d'autorisation) et génère des données vers CSV, Python est sélectionné, car il n'y a aucune raison de choisir VBA, et il est plus pratique d'écrire en Python.
  • Tâche: maintenir une base d'instructions, envoyer des notifications aux artistes interprètes ou exécutants, générer un rapport pour l'impression
    • Ici, j'ai choisi pendant très longtemps, car il existe de nombreuses alternatives:
      • Système de commande prêt à l'emploi tiers
      • Base de données avec une sorte de gestionnaire
      • Accès
      • Excel
    • Mon choix: VBA
      • Premièrement, Excel lui-même est une interface utilisateur prête à l'emploi.
      • Deuxièmement, VBA résout le problème de travailler avec Corporate Exchange via une connexion MS Outlook.
      • Troisièmement, cette décision a été prise en tenant compte des collègues, qu'Excel était plus clair que tout ce qui était complètement nouveau.

Conclusion


J'espère que pour quelqu'un, la note sera utile et permettra de gagner du temps sur le choix d'une pile pour résoudre leurs problèmes.

Source: https://habr.com/ru/post/fr439898/


All Articles