Betsy_2020 2020-08-12 17:09 采纳率: 28.6%
浏览 559
已采纳

如何在python中触发excel中的vba宏

问题描述

编一个自动处理数据的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()'
  • 写回答

2条回答 默认 最新

  • jingluan666 2020-08-12 17:55
    关注

    第一种方式,参数"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("执行成功")
    

    https://stackoverflow.com/questions/19616205/running-an-excel-macro-via-python

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧