我想使用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文件。
答案 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