在Delphi中为Excel编写DLL

时间:2008-12-05 14:30:32

标签: delphi excel vba dll idispatch

我正在使用Turbo Delphi 2006。

DLL将作为VBA / DLL组合的一部分从Excel中调用。

问题的第一部分是试图找出如何向DLL传递对当前Excel会话的引用。我见过的大多数其他代码都是它启动了一个单独的Excel实例,而不是你所在的实例。

我看到一些C ++代码创建了IDispatch的实例,然后将某些内容传递给IDispatch对象的方法,但对C ++知之甚少。

有什么想法吗?

3 个答案:

答案 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