需要骨架代码从 PythonWin 调用 Excel VBA

Posted

技术标签:

【中文标题】需要骨架代码从 PythonWin 调用 Excel VBA【英文标题】:Need skeleton code to call Excel VBA from PythonWin 【发布时间】:2010-09-25 15:30:00 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

这是框架代码:

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

【讨论】:

【参考方案2】:

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

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

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

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

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

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

【讨论】:

谢谢。这对一些人有帮助。从 pywin32 方面来看,我仍在寻找显示打开文件的初始步骤并引用完整界面的内容。 PyWin32 显示了支持 Run 方法的接口层次结构的几个部分。

以上是关于需要骨架代码从 PythonWin 调用 Excel VBA的主要内容,如果未能解决你的问题,请参考以下文章

从汇编代码和骨架 C 导出数组的大小

SpringCloud应用骨架开发

SpringCloud应用骨架开发

pythonwin7上多个版本python安装

如何将数据从闪亮的应用程序写入exce / csv文件?恰好我想将股票价格值的值写入excel / csv文件

在vue项目中使用骨架屏