我想要做的是从我的python代码中调用一个宏。以下是来源的样本:
xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = 1
xl.Workbooks.Open("C:\\Program Files\\Microsoft Office\\Office14\\XLSTART\\perso.xlsm")
xl.Workbooks.Open(argv[1])
xl.Application.Run('perso.xlsm!' + argv[2])
xl.Application.Run('perso.xlsm!' + argv[2] + '2')
xl.Workbooks.Open(argv[0])
xl.Application.Run('perso.xlsm!aggregate_report_ouverture_appli')
xl.Application.Run('perso.xlsm!macro', 'lol')
xl.Save()
xl.Quit()
前两个宏工作正常。但最后需要设置一个参数(在这种情况下为“lol”)。通过这个尝试:
xl.Application.Run('perso.xlsm!macro', 'lol')
我的宏是调用,但未设置参数。知道如何做到这一点或在哪里可以找到这个模块的“javadoc”(是的,我来自Java世界!)。
如果您需要更多解释,请告诉我。
谢谢你。
达明。
答案 0 :(得分:2)
不幸的是,在这种情况下,关于excel的win32com的完整文档不存在;您将不得不查看MS office Excel MSDN中的大部分内容(有时候您只需要修改代码就不会太糟糕了):
http://msdn.microsoft.com/en-us/library/office/bb149081(v=office.12).aspx
至于你的问题,请考虑带有两个参数的示例宏:
Sub Proc(sParam1 As String, iParam2 As Integer)
MsgBox sParam1 & " is " & iParam2 & " Years Old"
End Sub
宏有两个正在寻找的参数。以下python代码将使用params set调用宏:
import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Visible = True
Path = "C:\\Program Files\\Microsoft Office\\Office14\\XLSTART\\perso.xlsm"
xl.Workbooks.Open(Filename=Path)
param1 = "Jeremy"
param2 = 3
xl.Application.Run("Proc", param1, param2)
我不确定你的情况下宏所期望的变量类型是什么,但是'lol'却是从你的例子中作为字符串从python发送到宏。希望这会有所帮助。