2012-07-24 3 views
2

J'essaie d'utiliser python pour exécuter une macro Excel, puis fermez Excel. Je donne les résultats suivants:Python en cours d'exécution d'une macro Excel

import win32com.client 
import os 

xl = win32com.client.DispatchEx("Excel.Application") 
wb = xl.workbooks.open("X:\Location\Location2\File1.xlsm") 
xl.run("File1.xlsm!WorkingFull") 
xl.Visible = True 
wb.Close(SaveChanges=1) 
xl.Quit 

Mon script ouvrira ses portes et bien proche si je prends le xl.run (« File1.xlsm WorkingFull! ») Quand je lance ce que j'obtiens l'erreur suivante:

Traceback (dernier appel en dernier): Fichier "C: \ Python27 \ File1.py", ligne 6, en xl.run ("Fichier1.xlsm! WorkingFull") Fichier "", ligne 2, en exécution com_error: (-2147352567, 'Une exception s'est produite.', (0, 'Microsoft Excel', u 'Impossible d'exécuter la macro' File1.xlsm! WorkingFull 'La macro n'est peut-être pas disponible dans ce classeur ou toutes les macros peuvent être désactivées . ", u'xlmain11.chm ', 0 (-2146827284), None)

J'ai des macros activées et je sais que c'est dans le classeur, quel est le problème?

+1

Avez-vous essayé de réduire l'appel? 'xl.run (" WorkingFull ")'? – SeanC

+0

Assurez-vous que votre macro n'est pas privée. Essayez aussi 'xl.run (wb.WorkingFull)' et voyez si cela fonctionne. – KFleschner

+0

travaillé, mais je reçois l'erreur, mais il semble exécuter ma macro. La seule raison pour laquelle je sais que c'est ma macro enregistre un fichier. Traceback (dernier appel en dernier): Fichier "C: \ Python27 \ file1.py", ligne 6, dans xl.run ("WorkingFull") Fichier "", ligne 2, dans run com_error: (-2147352567, 'Une exception s'est produite.', (0, Aucune, Aucune, Aucune, 0, -2146788248), Aucune) –

Répondre

3

veuillez voir ci-dessous le code pour exécuter une macro Excel en utilisant python. Vous pouvez trouver ce code dans ce Site - Link. Utilisez ce site pour d'autres références pour les scripts excel, vba et python qui pourraient être utiles à l'avenir.

from __future__ import print_function 
import unittest 
import os.path 
import win32com.client 

class ExcelMacro(unittest.TestCase): 
    def test_excel_macro(self): 
     try: 
      xlApp = win32com.client.DispatchEx('Excel.Application') 
      xlsPath = os.path.expanduser('C:\test1\test2\test3\test4\MacroFile.xlsm') 
      wb = xlApp.Workbooks.Open(Filename=xlsPath) 
      xlApp.Run('macroName') 
      wb.Save() 
      xlApp.Quit() 
      print("Macro ran successfully!") 
     except: 
      print("Error found while running the excel macro!") 
      xlApp.Quit() 
if __name__ == "__main__": 
    unittest.main() 
+2

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. – cpburnz

+0

cpBurnz - Je comprends votre préoccupation et j'ai placé le code ci-dessus qui montrera aux utilisateurs comment exécuter une macro Excel en utilisant python. Si vous pouviez voter sur ma réponse comme utile, ce serait grandement apprécié. – Developer

+0

Cela semble beaucoup mieux. – cpburnz