web-dev-qa-db-fra.com

Vous utilisez Python pour programmer des macros MS Office?

Je l'ai récemment pris comme projet pour m'apprendre à programmer en Python. Dans l'ensemble, je dois dire que j'en suis impressionné.

Dans le passé, je suis généralement resté fidèle à la programmation dans VBA principalement pour MS Excel (mais aussi un peu dans MS Access et Word) et j'ai eu du mal à trouver des moyens de lui faire faire des choses qui Python peut faire facilement avec une seule commande.

Je me demandais s'il y avait un moyen raisonnable d'exploiter la puissance de programmation et la facilité de Python tout en utilisant les différents outils d'Office (principalement Excel)?

27
Jesse

Il existe un ensemble de plates-formes croisées Python - appelés xlrd, xlwt et xlutils - pour lire et écrire des fichiers Excel. Il y a quelques limitations (par exemple, je ne pense pas qu'ils puissent traiter les macros) , mais ils vous permettent de travailler avec des fichiers Excel sur des plates-formes non Windows, si cela vous est utile. Voir: http://www.python-Excel.org/

En outre, il existe SO questions traitant déjà de ce type de sujet, notamment: Existe-t-il un meilleur moyen (en plus de COM) de contrôler Excel à distance?

9
GreenMatt

Oui absolument. Vous souhaitez utiliser win32com module, qui fait partie de pywin32 ( obtenez-le ici ).

J'ai trouvé que vous pouvez vraiment simplifier l'intégration Python en écrivant une macro dans VBA pour Python à utiliser, puis avoir juste Python appelez la macro. Elle ressemblera à ceci:

from win32com.client import Dispatch as comDispatch

xl = comDispatch('Excel.Application')
xl.Workbooks.Open("Macros.xls", False, True)
xl.Run("Macros.xls!Macro_1")

Je suis sûr qu'il y a plein d'exemples sur SO ... Comme celui-ci .

22
Jason Coon

Ou jetez un œil à IronPython. IPy est une implémentation .NET native de Python 2.6, vous pouvez le trouver sur http://www.codeplex.com/ironpython .

Nous l'avons utilisé pour plusieurs projets. Vous pouvez l'utiliser "de l'extérieur" en utilisant COM ou - comme nous le faisons - écrire un complément Excel avec un ScriptHost, qui appelle le code IronPython vous donnant un environnement similaire à VBA.

Étant une DLL .NET, IPy s'intègre très bien dans la pile Windows .NET moderne.

7
raindog

Les packages xlrd, xlwt et xlutils mentionnés ci-dessus ne peuvent lire et écrire que les fichiers .xls dont la taille est limitée à 65 000 lignes et 256 colonnes. En dehors de cela, c'est un bon outil.

Mais je suis passé à un autre package python-Excel, OpenPyXL, qui peut lire et écrire des fichiers .xlsx. Je le trouve également facile à utiliser et la documentation est bonne.

OpenPyXL: http://packages.python.org/openpyxl/index.html

5
sequoia

C'est une question d'il y a longtemps, mais je la pose ici pour que d'autres puissent la pointer dans leur recherche.

Une option non discutée ici, que j'utilise tout le temps, est de créer un serveur COM à partir de Python et de l'appeler à partir de VBA dans n'importe quelle application Office. Il existe un bon tutoriel pour faire un serveur COM avec Python sur: http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html

Vous vous retrouvez avec un serveur COM (n'oubliez pas de le rendre en cours) qui peut être créé par un appel à CreateObject() dans VBA. Vous appelez ensuite les méthodes dessus comme vous le faites avec un objet COM créé avec CreateObject(). Vous ne pouvez pas faire une seule étape dans votre script Python, mais vous pouvez intercepter la journalisation avec win32traceutil de la distribution Pywin32. Fonctionne parfaitement.

3
user7969

voici un lien utile:

http://continuum.io/using-Excel

  1. Essayez Pyvot - A Python vers/depuis le connecteur Excel de Microsoft:

http://pytools.codeplex.com/wikipage?title=Pyvot

J'aime aussi beaucoup PTVS du même développeur. équipe, qui fournit le meilleur débogage dans Python que j'ai connu jusqu'à présent.

2.

Ce que vous pouvez faire avec VBA + Python est le suivant:

Compilez vos scripts py qui prennent des entrées et génèrent des sorties sous forme de fichiers texte ou à partir de la console. Ensuite, VBA préparera l'entrée pour py, appellera le script py pré-compilé et relira sa sortie.

3.

Considérez OpenOffice ou LibreOffice qui prennent en charge les scripts Python.

Cela suppose que les options disponibles avec les interfaces de script COM ou MS ne répondent pas à vos besoins.

4.

Ce n'est pas une approche libre, mais mérite d'être mentionnée (présentée dans Forbes et New York Times):

https://datanitro.com

5.

Ce n'est pas gratuit pour un usage commercial:

PyXLL - complément Excel qui permet d'appeler des fonctions écrites en Python dans Excel.

3
denfromufa