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