2

我需要从 python 脚本调用 Excel 工作簿中的 VBA 宏。其他人为 Excel 工作簿提供了宏。该宏从外部数据库中获取更新的值,并对数据执行一些相当复杂的处理。我需要这个按摩的结果,如果可以避免的话,我真的不想在我的 Python 脚本中复制它。所以,如果我可以从我的脚本中调用宏并获取按摩结果,那就太好了。

我从“Win32 上的 Python 编程”中学到的关于 COM 的一切。好书,但不足以完成我手头的任务。我搜索了,但没有找到任何关于如何做到这一点的好例子。有没有人有任何好的例子,或者可能有一些关于如何寻址/调用 VBA 宏的骨架代码?Excel COM 接口上的一般参考资料(书籍、网络链接等)在这里也会有所帮助。谢谢。

4

2 回答 2

6

好,我知道了!感谢您对 Application.Run 方法的帮助。此信息,加上“Microsoft Excel Visual Basic 参考”: http: //msdn.microsoft.com/en-us/library/aa209782 (office.10).aspx——正如 Hammond & Robinson 在“Python Programming on Win32"——正是我们所需要的。

这是骨架代码:

import win32com.client
xl=win32com.client.Dispatch("Excel.Application")
xl.Workbooks.Open(Filename="<your Excel File>",ReadOnly=1)
xl.Application.Run("<your macro name>")
#...access spreadsheet data...
xl.Workbooks(1).Close(SaveChanges=0)
xl.Application.Quit()
xl=0
于 2008-12-06T15:56:33.723 回答
1

对不起,我对python不够了解。但是,以下内容应该会有所帮助。

Excel 的 Application 对象有一个 Run 方法 - 它采用宏的名称及其参数。

让我们假设工作簿有一个名为 test 的宏。


Sub test(ByVal i As Integer)
MsgBox "hello world " & i
End Sub

您可以使用 Application.Run "test", 1234 调用它

这将调用宏并显示带有“hello world 1234”的消息框。

于 2008-12-06T06:01:41.503 回答