42 votes

Piloter Excel à partir de Python sous Windows

Nous avons différentes feuilles de calcul qui emploient délicieusement compliqué macros de tiers et d'extensions pour produire des modèles complexes. Je suis en train de travailler sur un projet qui implique légèrement peaufiner les différentes entrées et de voir les résultats. Plutôt que de le faire à la main ou écrit en VBA, j'aimerais voir si je peux écrire un script python pour conduire cette. En d'autres termes, le script python va démarrer, chargez la feuille excel, et ensuite interagir avec la feuille en apportant des changements mineurs dans certaines cellules et de voir comment ils affectent d'autres cellules.

Donc, ma question est double:

  • Quelle est la meilleure bibliothèque à utiliser pour piloter excel à partir de python dans une telle façon?

  • Où sont les meilleurs de la documentation et des exemples sur l'utilisation de la bibliothèque?

Cheers, /YGA

46voto

codeape Points 38576

Pour le contrôle de Excel, utilisez pywin32, comme @igowen suggère.

Notez qu'il est possible d'utiliser statique de l'expédition. Utiliser makepy.py de la pywin32 projet de créer un module python le python wrappers. En utilisant les enveloppes générées simplifie le développement, depuis par exemple ipython vous donne onglet achèvement et de l'aide au cours du développement.

Statique expédition exemple:

x:> makepy.py "Microsoft Excel 11.0 Object Library"
...
La génération...
Module d'importation
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
...

Des liens vers la Documentation:

21voto

igowen Points 491

J'ai fait cela à l'aide de pywin32. Il n'est pas particulièrement agréable, car il n'y a pas vraiment d'abstraction; c'est comme à l'aide de VBA, mais avec la syntaxe de python. Vous ne pouvez pas compter sur les docstrings, de sorte que vous aurez envie d'avoir la MSDN Excel de référence à 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 être capable de trouver le Excel 2007 docs si vous creusez un peu autour de lui.).

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!

8voto

codeape Points 38576

Découvrez le projet DataNitro (ancien nom IronSpread). C'est un plug-in Python pour Excel.

1voto

Clint Miller Points 6339

J'ai travaillé sur un projet de maison de l'année dernière qui implique un client écrit comme un Python Excel plug-in. Le projet est essentiellement une base de données en ligne simplifiée pour l'accès des utilisateurs finaux. Excel plug-in permet aux utilisateurs d'interroger les données de la base de données à afficher dans Excel.

Je n'ai jamais été très loin avec Excel plug-in et mon code est un peu moche. Mais, ce que j'ai, est sous une licence BSD et disponible via un Bazar à l'

http://www.launchpad.net/analyz/trunk

Le client ne fonctionne pas car je n'ai pas de serveur public de course, mais au moins vous pouvez regarder ce que j'ai fait avec le code pour obtenir quelques idées comment cela pourrait fonctionner. Le code sera également vous montrer comment construire une boîte de dialogue MFC dans 100% Python.

Si vous avez des difficultés à accéder au logiciel ou avez des questions, contactez-moi à clint.miller1@gmail.com.

1voto

Alex Points 378

J'ai écrit une classe python qui possède des fonctions utiles et peut être utilisée pour travailler avec Excel à partir de Python http://sourceforge.net/projects/excelcomforpython/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X