在Delphi中为Excel编写一个DLL

我正在使用Turbo Delphi 2006。

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

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

我见过一些创buildIDispatch实例的C ++代码,然后将某些东西传递给IDispatch对象的一个​​方法,但不知道多lessC ++。

有任何想法吗?

你所描述的是所谓的写一个COM插件。 您需要创build一个自动化DLL并实现IDTExtensibility2接口。 然后,您将接收Excel Application接口作为OnConnection方法的参数。

您还需要将您的DLL 注册为插件,以便Excel自动加载它。

编辑:忘了提及:你可能想看看加载速递 。 他们的框架和组件使得开始创buildOffice插件变得非常容易。 您绝对不会为IDTExtensibility2的细节烦恼。 尽pipe如此,所有这些都是(价格合理)的。

Delphi附带一组ActiveX控件,可以完全访问Excel和其他Office应用程序。 他们应该在工具面板的“服务器”选项卡上。

如果不存在,请select“组件”|“安装软件包”,然后向下滚动列表直到最后,然后select正确的软件包。

在默认安装中,应该调用它们:

Microsoft Office示例自动化服务器包装器组件

XP和Win2k应该有一个。 XP的将为Vista工作。

现在,如果你想自动化Excel。

如果你只是想通过使用Delphi添加function到Excel,我会build议使用COM对象,因为我怀疑Excel是非常接受的COM对象。 否则,您可以创build一个直的DLL,并使用Excel使用其他任何DLL的相同方式。

我不太了解Office,但我想你应该使用COM / ActiveX。 那么你也可以得到你的IDispatch。 见http://delphi.about.com/od/comoleactivex/OLE_COM_DCOM_Automation_ActiveX_Delphi_knowledge_base.htm