问题描述
编一个自动处理数据的py,包含宏的excel是继承的别人的,里面有按钮可以点击计算。现在想做的就是编写python可以自动的点击这个按钮或者自动的触发宏,不需要返回值,计算结果能跟手动一样返回在excel中即可。
已经试过的方法
宏名称是all_transport1(),两种方法都是网上查了资料找到的。
1,用excel appilication直接运行,代码如下:
xlApp.Run('all_transport1()')
没有报错,整个运行结束,但是宏的结果没有显示在excel中
2,用ExecuteExcel4Macro函数,代码如下:
strPara = xlBook.Name + 'all_transport1()'
status = xlApp.ExecuteExcel4Macro(strPara)
运行之后报错代码如下:
File "<COMObject Excel.Application>", line 2, in ExecuteExcel4Macro
File "C:\Users\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\dynamic.py", line 287, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "There's a problem with this formula.\n\nNot trying to type a formula?\nWhen the first character is an equal (=) or minus (-) sign, Excel thinks it's a formula:\n\n• you type: =1+1, cell shows: 2\n\nTo get around this, type an apostrophe ( ' ) first:\n\n• you type: '=1+1, cell shows: =1+1", 'xlmain11.chm', 0, -2146827284), None)
报错信息没看明白。。。
有什么好的方法可以实现触发宏么???
问题已解决,解决办法:
1.参考采纳的回答:第一种方法中,参数"all_transport1()"的括号不需要,只提供宏名称就行了
import win32com.client
import os.path
xlApp = win32com.client.DispatchEx('Excel.Application')
xlsPath = os.path.expanduser(r'文件路径')
wb = xlApp.Workbooks.Open(Filename=xlsPath)
xlApp.Run('宏名称')
wb.Save()
xlApp.Quit()
print("执行成功")
2.第二种方法,宏名称前需要加一个!叹号,也就是把
strPara = xlBook.Name + 'all_transport1()'
改成
strPara = xlBook.Name + '!all_transport1()'