L'exécution d'une macro Excel via Python?

Je suis en train de lancer une macro via python, mais je ne suis pas sûr de savoir comment le faire fonctionner...

J'ai le code suivant jusqu'à présent, mais cela ne fonctionne pas.

import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="C:\test.xlsm",ReadOnly=1)
xl.Application.Run("macrohere")
xl.Workbooks(1).Close(SaveChanges=0)
xl.Application.Quit()
xl=0

J'ai le traceback:

Traceback (most recent call last):
  File "C:\test.py", line 4, in <module>
    xl.Application.Run("macrohere")
  File "<COMObject <unknown>>", line 14, in Run
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 282, in _ApplyTypes_
    result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Excel', u"Cannot run the macro 'macrohere'. The macro may not be available in this workbook or all macros may be disabled.", u'xlmain11.chm', 0, -2146827284), None)

MODIFIER

import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="C:\test.xlsm",ReadOnly=1)
try:
    xl.Application.Run("test.xlsm!testmacro.testmacro")
    # It does run like this... but we get the following error:
    # Traceback (most recent call last):
        # File "C:\test.py", line 7, in <module>
        # xl.Workbooks(1).Close(SaveChanges=0)
        # File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 192, in __call__
        # return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.defaultDispatchName,None)
    # com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
except:
    # Except isn't catching the above error... :(
    xl.Workbooks(1).Close(SaveChanges=0)
    xl.Application.Quit()
    xl=0
  • Peut-être ne pas utiliser le même nom pour le module et la méthode.
  • Quelle est la définition de la macro? est ce qu'il a déclaré comme Public sub testMacro ou Private?
  • Avez-vous besoin pour exécuter la macro à partir de Python? Peut facilement faire la même chose en Python de toute façon. Également utiliser quelque chose comme del xl plutôt que xl=0 pour bien se débarrasser de la référence à l'objet.
  • élaborer?
  • Aucun des deux, C'est juste Sub testMacro
  • Ma feuille excel, les importations de données dans excel, pistes de 50+ formules sur elle, convertit des valeurs et de sorties au format CSV... je vais utiliser del xl aswell bien qu'.
  • ceci est similaire à ma question stackoverflow.com/questions/17446807/...

InformationsquelleAutor Ryflex | 2013-10-27