如何使用Python脚本运行Excel宏?

时间:2018-05-11 07:18:45

标签: python excel vba

我想使用Python脚本在Excel文件中运行宏。

import os
import win32com.client

if os.path.exists(""C:\\Users\\siddharth.mungekar\\Desktop\\MemleakTest\\test.xlsm"):
    xl = win32com.client.Dispatch("Excel.Application")
    xl.Workbooks.Open(Filename="C:\\Users\\siddharth.mungekar\\Desktop\\MemleakTest\\test.xlsm")
    xl.Visible = True
    xl.Run('Mem_Leak')

打开Excel文件后脚本失败,并出现以下错误:

  

C:\ Users \ siddharth.mungekar \ AppData \ Local \ Programs \ Python \ Python36 \ python.exe C:/Users/siddharth.mungekar/PycharmProjects/MacroViaPython/ExcelMacroEnabler.py       Traceback(最近一次调用最后一次):           File&#34; C:/Users/siddharth.mungekar/PycharmProjects/MacroViaPython/ExcelMacroEnabler.py" ;,第14行,在               xl.Run(&#39; Mem_Leak&#39;)           文件&#34;&#34;,第14行,在运行中           文件&#34; C:\ Users \ siddharth.mungekar \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ win32com \ client \ dynamic.py&#34;,第287行,在 ApplyTypes < / EM>               result = self。 oleobj .InvokeTypes(*(dispid,LCID,wFlags,retType,argTypes)+ args)       pywintypes.com_error :( -2147352567,&#39;发生异常。&#39;,(0,&#39; Microsoft Excel&#39;,&#34;无法运行宏&#39; Mem_Leak&#39;。宏可能在此工作簿中不可用,或者可能禁用所有宏。&#34;,&#39; xlmain11.chm&#39;,0,-2146827284),无)

我尝试修改信任中心设置。

当另一个Excel文件已经手动打开时,代码可以正常工作。

我尝试打开虚拟Excel文件,然后打开目标Excel文件并运行宏。这没用。必须手动打开虚拟excel文件。

1 个答案:

答案 0 :(得分:0)

我通过将宏放入新模块中而不是将其放入“ ThisWorkbook”中并调用以下方法来解决此问题:

xl.Run("Module1.UpdateTable")

完整代码:

import os
import win32com.client

sXlFile = "C:\\Desktop\\test.xlsm"
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(os.path.abspath(sXlFile))
try:
  xl.Run("Module1.UpdateTable")
except Exception as e:
  print(e)

xl.Application.Quit() # Comment this out if your excel script closes
del xl