Excel COM 加载项和自动化加载项

摘要

除了组件对象模型 (COM) 加载项外,Microsoft Office Excel 还支持自动化加载项。本文介绍这两种类型的加载项之间的差异。

详细信息

COM 加载项

COM 加载项为开发人员提供了一种针对自定义任务扩展 Office 应用程序功能的方法。 COM 加载项通常用于自动执行 Excel,以响应命令栏按钮、窗体或对话框或其他特定于 Excel 的事件的单击,例如打开或关闭工作簿或在工作表上输入数据。 COM 加载项函数不能直接从工作表中的单元格公式调用。

COM 加载项是 (必须实现 IDTExensibility2 接口的 ActiveX DLL) 的进程内 COM 服务器。 所有 COM 加载项都必须实现此接口的五个方法中的每一种:OnConnection、OnStartupComplete、OnAddinsUpdate、OnBeginShutDown 和 OnDisconnection。

在用户系统上安装 COM 加载项时,将为该加载项创建注册表项。 除了常规的 COM 注册外,还会为运行 COM 加载项的每个 Office 应用程序注册一个 COM 加载项。 Excel 使用的 COM 加载项注册在以下注册表项中:


            
HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\ 

此项包含每个已安装的 COM 加载项的子项。 子项的名称是 COM 加载项的 ProgID。 COM 加载项的子项还包含描述 COM 加载项的友好名称、说明和加载行为的值。 加载行为描述了加载项在 Excel 中的加载方式:启动时加载、仅下次启动时加载、按需加载或未加载。

 也可以通过 Excel 用户界面加载和卸载 COM 加载项。 请按以下步骤完成此操作:

  1. 在“视图”菜单上,指向“工具栏”,然后单击“自定义”。
  2. 在“工具栏”对话框中,单击“高级”选项卡。在类别列表中,选择“工具”。 在命令列表中找到“COM 加载项”,然后将该命令拖动到所选菜单或命令栏中。 关闭“工具栏”对话框。
  3. 单击添加的“COM 加载项”命令以显示“COM 加载项”对话框。 该对话框列出了系统上安装的所有 COM 加载项,并选择了当前加载的 COM 加载项。

也可以通过 Excel 用户界面加载和卸载 COM 加载项。 请按以下步骤完成此操作:

  1. 单击“Microsoft Office 按钮”,然后单击“Excel 选项”

  2. 单击“加载项”

  3. “管理”下,单击 “COM 加载项”,然后单击“ 转到 ”。

    COM 加载项” 对话框列出了计算机上安装的所有 COM 加载项。 选择当前加载的 COM 加载项。

有关更多信息,请访问下面的 Microsoft 网站:

Office 加载项平台概述

自动化加载项

除了 COM 加载项,Excel 还支持自动化加载项。自动化加载项基于 COM 加载项而构建,自动化加载项中的函数可以从 Excel 工作表中的公式调用。 COM 加载项必须是支持 IDTExtensibility2 接口的进程内 COM 服务器;但是,自动化加载项可以是进程内或进程外 COM 服务器,并且 IDTExtensibility2 的实现是可选的。

若要在 Excel 中使用自动化加载项中的函数,请执行以下步骤:

  1. 在“工具”菜单上,单击“加载项”。
  2. 在“Add-Ins”对话框中,单击“自动化”。 从已注册的 COM 服务器列表中,选择自动化加载项,然后单击“确定”。
  3. 自动化加载项将显示在“加载项”对话框中。 单击“确定”关闭“Add-Ins”对话框。

要在 Excel 2007 及更高版本中使用自动化加载项中的函数,请按照下列步骤操作:

  1. 单击“Microsoft Office 按钮”,然后单击“Excel 选项”

  2. 单击“加载项”

  3. “管理”下,单击“ Excel 加载项”,然后单击“ 转到”。

  4. 在“ 加载项 ”对话框中,单击“ 自动化”。 在已注册的 COM 服务器列表中,单击自动化加载项,然后单击“ 确定”

    自动化加载项将显示在 “加载项 ”对话框中。 单击“ 确定” 关闭“ 加载项 ”对话框。

当你在“Add-Ins”对话框中向列表添加内容或选择和清除列表中的加载项时,Excel 会将更改存储在注册表中。 首先,Excel 使用以下注册表设置确定是否加载加载项列表中的自动化加载项:


 Excel 2002
Key:            HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Options
String:         OPENx
Sample Value:   /A "ServerName.ClassName"

 Excel 2003
Key:            HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options
String:         OPENx
Sample Value:   /A "ServerName.ClassName"
Excel 2007
Key:            HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Options
String:         OPENx
Sample Value:   /A "ServerName.ClassName"

注意:根据使用的版本更改 Office 版本号。

字符串值中使用的 /A 开关是 Excel 中的新开关和旧开关,专门用于加载自动化加载项。所有自动化加载项均按需加载;没有任何设置可以更改自动化加载项的加载行为。

清除“Add-Ins”对话框中列出的自动化加载项时,将在以下注册表项中创建名称等于该加载项的 ProgID 的子项:

HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Add-in Manager
Excel 2003:

HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Add-in Manager

HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Add-in Manager
此注册表设置可确保,即使选择不加载自动化加载项,仍保留在列表中。

有关更多信息,请访问下面的 Microsoft 网站:

Office 加载项平台概述

实现 IDTExtensibility2 的自动化加载项

如前所述,自动化加载项可以实现 IDTExtensibility2,但 Excel 不要求从工作表调用加载项中的函数。 如果您需要自动化加载项获取对 Excel 实例的引用,则可以实现 IDTExtensibility2 并使用 OnConnection 的 Application 参数来自动执行 Excel。

实现
IDTExtensibility2 可以通过“COM Add-Ins”对话框和“Add-Ins”对话框在 Excel 用户界面中加载。 下面介绍了自动化加载项的行为,该行为基于它是加载到其中一个还是两个对话框中加载的:

  • 仅在“加载项”对话框中加载。

    加载项是按需加载的。 可以从工作表中的公式调用加载项中的函数。

  • 仅在“COM 加载项”对话框中加载。

    加载项作为 COM 加载项加载,其加载行为由注册表中的设置决定。 不能从工作表中的公式调用加载项中的函数。

  • 在“COM 加载项”对话框和“加载项”对话框中加载。

    加载加载项的两个单独实例。 一个实例加载为 COM 加载项,另一个实例加载为自动化加载项。 COM 加载项实例使用注册表中指示的加载行为;自动化加载项实例按需加载。 这两个实例彼此独立工作,不共享全局变量。

由于自动化加载项是按需加载的,Excel 可能会在加载项处于单元格编辑模式时尝试加载该加载项。 因此,在开发支持 IDTExtensibility2 的自动化加载项时,应小心,不要在加载加载项时执行任何试图更改 Excel 状态的操作。 有关更多信息,请参阅以下 Microsoft 知识库文章:

284876 BUG:加载自动化 Add-In 时 Excel 失败

(c) Microsoft Corporation 2001,保留所有权利。 Lori B. Turner,Microsoft Corporation 的贡献。