Nous avons diverses feuilles de calcul qui utilisent des macros délicieusement compliquées et des extensions tierces pour produire des modèles compliqués. Je travaille sur un projet qui implique de modifier légèrement différentes entrées et de voir les résultats. Plutôt que de le faire à la main ou d'écrire VBA, j'aimerais voir si je peux écrire un script python pour piloter cela. En d'autres termes, le python = le script démarre, charge la feuille Excel, puis interagit avec la feuille en apportant des modifications mineures dans certaines cellules et en voyant comment elles affectent les autres cellules.
Donc, ma question est double:
Quelle est la meilleure bibliothèque à utiliser pour piloter Excel à partir de python de cette manière?
Où est la meilleure documentation/exemples sur l'utilisation de cette bibliothèque?
À la vôtre,/YGA
Pour contrôler Excel, utilisez pywin32, comme le suggère @igowen.
Notez qu'il est possible d'utiliser la répartition statique. Utilisation makepy.py
à partir du projet pywin32 pour créer un module python avec les wrappers python. L'utilisation des wrappers générés simplifie le développement, car par exemple ipython vous permet de terminer les tabulations et aide pendant le développement.
Exemple de répartition statique:
x:> makepy.py "Bibliothèque d'objets Microsoft Excel 11.0" ... Génération ... Importation du module x:> ipython
> from win32com.client import Dispatch
> Excel = Dispatch("Excel.Application")
> wb = Excel.Workbooks.Append()
> range = wb.Sheets[0].Range("A1")
> range.[Press Tab]
range.Activate range.Merge
range.AddComment range.NavigateArrow
range.AdvancedFilter range.NoteText
...
range.GetOffset range.__repr__
range.GetResize range.__setattr__
range.GetValue range.__str__
range.Get_Default range.__unicode__
range.GoalSeek range._get_good_object_
range.Group range._get_good_single_object_
range.Insert range._oleobj_
range.InsertIndent range._prop_map_get_
range.Item range._prop_map_put_
range.Justify range.coclass_clsid
range.ListNames range.__class__
> range.Value = 32
...
Liens de documentation:
Je l'ai fait en utilisant pywin32 . Ce n'est pas une expérience particulièrement agréable, car il n'y a pas vraiment d'abstraction; c'est comme utiliser VBA, mais avec la syntaxe python. Vous ne pouvez pas vous fier aux docstrings, vous voudrez donc avoir la référence MSDN Excel à portée de main ( http: // msdn. Microsoft.com/en-us/library/aa220733.aspx est ce que j'ai utilisé, si je me souviens bien. Vous devriez pouvoir trouver les documents Excel 2007 si vous creusez un peu.).
Voir ici pour un exemple simple.
from win32com.client import Dispatch
xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1
xlApp.Workbooks.Add()
xlApp.ActiveSheet.Cells(1,1).Value = 'Python Rules!'
xlApp.ActiveWorkbook.ActiveSheet.Cells(1,2).Value = 'Python Rules 2!'
xlApp.ActiveWorkbook.Close(SaveChanges=0) # see note 1
xlApp.Quit()
xlApp.Visible = 0 # see note 2
del xlApp
Bonne chance!
Découvrez le projet DataNitro (ancien nom IronSpread). Il s'agit d'un plug-in Python pour Excel.
L'année dernière, j'ai travaillé sur un projet domestique impliquant un client écrit sous la forme d'un plug-in Excel Python. Le projet est essentiellement une base de données en ligne simplifiée pour l'accès de l'utilisateur final. Le plug-in Excel permet les utilisateurs à interroger les données de la base de données pour les afficher dans Excel.
Je ne suis jamais allé très loin avec le plug-in Excel et mon code est un peu moche. Mais ce que j'ai est sous licence BSD et disponible via Bazaar à l'adresse
http://www.launchpad.net/analyz/trunk
Le client ne fonctionnera pas car je n'ai pas de serveur public en cours d'exécution pour le moment, mais au moins vous pouvez regarder ce que j'ai fait avec le code pour avoir des idées sur la façon dont cela pourrait fonctionner. Le code vous montrera également comment créer une boîte de dialogue MFC en 100% Python.
J'ai passé environ une semaine, et voici mon implémentation (ou plutôt une preuve de concept): https://github.com/Winand/SimplePython
L'idée principale est de rendre Python aussi facile à écrire et à appeler depuis Microsoft Office que les macros VBA (j'ai créé un complément uniquement pour Excel).
J'ai écrit python qui permet de travailler avec Excel via l'interface COM dans Windows http://sourceforge.net/projects/excelcomforpython/
La classe utilise win32com pour interagir avec Excel. Vous pouvez utiliser la classe directement ou l'utiliser comme exemple. De nombreuses options implémentées comme les formules matricielles, la mise en forme conditionnelle, les graphiques, etc.
Il existe un projet intéressant pour intégrer python dans Excel en tant que processus en cours DLL qui peut être trouvé à:
http://opentradingsystem.com/PythonForExcel/main.html
Un autre projet un peu plus simple dans le même esprit existe à:
http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython
Ces projets semblent très prometteurs mais nécessitent plus de développement.