0

我正在使用 Turbo Delphi 2006。

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

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

我见过一些 C++ 代码创建一个实例,IDispatch然后将某些内容传递给 IDispatch 对象的方法,但对 C++ 了解不多。

有任何想法吗?

4

3 回答 3

7

您所描述的称为编写 COM 插件。您需要创建一个自动化 DLL 并实现IDTExtensibility2接口。然后,您将收到 ExcelApplication接口作为该OnConnection方法的参数。

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

编辑:忘了提:您可能想看看Add-in Express。他们的框架和组件使得开始创建 Office 插件非常容易。您绝对不必为IDTExtensibility2. 不过,所有这些都带有(合理的)价格标签。

于 2008-12-05T22:56:31.893 回答
3

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

如果不存在,则选择组件|安装包,然后向下滚动列表直到最后,然后选择正确的包。

在默认安装中,它们应该被称为:

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

XP和Win2k应该有一个。XP 的将适用于 Vista。

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

如果您只想使用 Delphi 向 Excel 添加功能,我建议使用 COM 对象,因为我怀疑 Excel 非常接受 COM 对象。否则,您可以创建一个直接的 DLL,并像 Excel 使用任何其他 DLL 一样使用它。

于 2008-12-05T21:11:40.827 回答
0

我对Office不太了解,但我想你应该使用COM/ActiveX。然后你也会得到你的 IDispatch。请参阅http://delphi.about.com/od/comoleactivex/OLE_COM_DCOM_Automation_ActiveX_Delphi_knowledge_base.htm

于 2008-12-05T15:02:39.243 回答