Using pywin32, what is the difference between Dispatch and DispatchEx?
打开时,例如使用 pywin32 的电子表格,我找到了两个选项:
1 2 | excel1 = win32com.client.DispatchEx('Excel.Application') wb = excel1.Workbooks.Open('myxls.xls') |
或者我可以做到
1 2 | excel2 = win32com.client.Dispatch('Excel.Application') wb = excel2.Workbooks.Open('myxls.xls') |
我想知道这是否有什么不同。文档字符串对我也没有多大帮助:
1 2 3 4 5 6 7 | >>> w32.Dispatch.__doc__ 'Creates a Dispatch based COM object.\ ' >>> w32.DispatchEx.__doc__ 'Creates a Dispatch based COM object on a specific machine.\ ' |
在此站点中,他们建议
当我只是想在自己的 PC 上自动化电子表格时,我使用哪种方法有什么不同吗?
这取决于你想要什么。如果 Excel 已经打开,使用 dispatch 将在打开的 Excel 实例中创建一个新选项卡。如果 Excel 已经打开,使用 dispatchEx 将打开一个新的 Excel 实例。
但是,如果您想知道幕后的区别:
从 pywin32 源代码中,您可以看到
你可以在 MSDN 上查找
an extension of the IDispatch interface, supports features appropriate for dynamic languages such as scripting languages.
想法是,如果您要自动化的对象是动态对象(如 Python 或 Javascript 中的那种对象),而不是静态对象(如 C 或 Java 中的那种对象) ),Visual Basic 代码可以访问其动态特性——在运行时枚举、添加和删除成员等。
当然 pywin32 几乎可以做 VB 可以做的所有事情,但有时你只需要更明确一点。在这种情况下,您需要创建一个
如果您使用 COM 来自动化,例如 Excel,那么您会希望 .Dispatch 启动应用程序的新实例,而不是干扰已经在桌面上运行的实例。
使用 DispatchEx 代替 Dispatch