Python:运行Excel VBA脚本的脚本未运行

我写这篇文章是因为看起来search了一半的互联网后,我无法弄清楚为什么这段简单的代码不工作:

from win32com.client import Dispatch def RunExcelMacro(name): myExcel = Dispatch('Excel.Application') myExcel.Visible = 0 myExcel.Workbooks.Add('C:\AC_Software\TestDatei.xls') myExcel.Run(name) myExcel.DisplayAlerts = 0 myExcel.Quit() if __name__ == "__main__": RunExcelMacro('Makro_test') 

它应该运行包含在Excel文件“TestDatei.xls”中的vba脚本“Makro_test”。 我在办公室的64位Windows 7桌面机上尝试了Python和Java版本(32和64位)的不同组合。 我也在path中尝试了不同的反斜杠和反斜杠组合(反斜杠,简单,双)。 不幸的是,错误信息是德文的。 但是,如果你们中的一些人能够发现任何东西,这里是:

 Traceback (most recent call last): File "C:\Users\alloun\workspace\MyTestProject\root\nested\example.py", line 22, in <module> RunExcelMacro('Makro_test') File "C:\Users\alloun\workspace\MyTestProject\root\nested\example.py", line 16, in RunExcelMacro myExcel.Workbooks.Add('C:\AC_Software\TestDatei.xls') File "<COMObject <unknown>>", line 2, in Add pywintypes.com_error: (-2147352567, 'Ausnahmefehler aufgetreten.', (0, u'Microsoft Excel', u"'TestDatei.xls' wurde nicht gefunden. \xdcberpr\xfcfen Sie die Rechtschreibung des Dateinamens, und \xfcberpr\xfcfen Sie, ob der Speicherort der Datei korrekt ist.\n\nWenn Sie versuchen, die Datei \xfcber die Liste der zuletzt ge\xf6ffneten Dateien zu \xf6ffnen, stellen Sie sicher, dass die Datei nicht umbenannt, verschoben oder gel\xf6scht wurde.", u'xlmain11.chm', 0, -2146827284), None) 

这是英文错误信息:

pywintypes.com_error:(-2147352567,'Exception occurred。',(0,u'Microsoft Excel',u''TestDatei.xls')找不到。检查文件名的拼写,并确认文件位置是正确。\ n \ n如果您尝试从最近使用的文件列表中打开文件,请确保该文件未被重命名,移动或删除。“,”xlmain11.chm“,0,-2146827284) , 没有)

确保你的path是正确的,而不是尝试原始stringr'C:\AC_Software\TestDatei.xls' 。 我尝试了相同的代码,并使用了我的文件。

请参阅下面的代码使用python运行Excelmacros。 你可以在这个网站链接find代码。

 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()