我正在使用Turbo Delphi 2006。
DLL将作为VBA / DLL组合的一部分从Excel中调用。
问题的第一部分是试图找出如何向DLL传递对当前Excel会话的引用。我见过的大多数其他代码都是它启动了一个单独的Excel实例,而不是你所在的实例。
我看到一些C ++代码创建了IDispatch
的实例,然后将某些内容传递给IDispatch对象的方法,但对C ++知之甚少。
有什么想法吗?
答案 0 :(得分:7)
您所描述的内容称为编写COM插件。您需要创建自动化DLL并实现IDTExtensibility2
接口。然后,您将收到Excel Application
接口作为OnConnection
方法的参数。
您还需要register您的DLL作为插件,以便Excel自动加载它。
编辑:忘记提及:您可能需要查看Add-in Express。他们的框架和组件使得开始创建Office插件非常容易。你绝对不必为IDTExtensibility2
的细节烦恼。所有这些都带有(合理的)价格标签。
答案 1 :(得分:3)
Delphi附带了一组ActiveX控件,可以完全访问Excel和其他Office应用程序。它们应位于工具选项板的“服务器”选项卡上。
如果不存在,则选择“组件”|“安装包”,然后向下滚动列表直到最后,并选择正确的包。
在默认安装中,应该调用它们:
Microsoft Office Sample Automation Server包装器组件
应该有一个XP和Win2k。 XP将适用于Vista。
现在,如果你想自动化Excel。
如果您只想使用Delphi向Excel添加功能,我建议使用COM对象,因为我怀疑Excel非常接受COM对象。否则,您可以创建一个直接的DLL,并使用与Excel使用任何其他DLL相同的方式。
答案 2 :(得分:0)
我对Office不太了解,但我想你应该使用COM / ActiveX。然后你也得到你的IDispatch。见http://delphi.about.com/od/comoleactivex/OLE_COM_DCOM_Automation_ActiveX_Delphi_knowledge_base.htm