托管 Word 加载项: 初始设计






1.55/5 (8投票s)
本文探讨了开发 Word 加载项的各种可用选项及其权衡。旨在帮助开发人员根据需求选择最佳选项。
引言
选项
以下是编写托管 Word 加载项的选项:
- VSTO:VSTO 是一个强大的工具。许多复杂任务,如 shimming,由 VSTO(Orcas)自动处理。VSTO Word 加载项的作用域是文档级别和模板级别,但不是应用程序级别。
- Word 文档:VSTO 提供了一个“Word 文档”模板(在 VS 中)来创建 Word 加载项。此处编写的代码与 VBA 大致相同,但具有完全访问 Framework Class Library (FCL) 的优势。此代码仅与特定文档相关联,不会为任何其他 Word 文档运行。
- Word 模板:VSTO 还提供了一个名为“Word 模板”的模板。这比前一个选项提供了更通用的解决方案。基本思想是将所有代码都写入此模板,并将此模板放在 Office 的启动文件夹中。这样,每次打开/创建文档时都会加载此模板,从而使代码能够为文档运行。
- 共享加载项:如果 Word 加载项需要在应用程序级别运行,请使用共享加载项方法。“共享加载项”是 VS 提供的一个模板,不需要安装 VSTO。使用此方法创建的加载项继承自
IDTExtensibility2
接口。这是此方法的核心。
这里的基准是,当解决方案(加载项)需要在文档级别或模板级别进行范围限定时,使用 VSTO。尽管模板级别的加载项具有更大的灵活性,但此方法无法实现一些功能,例如选择性地为某些文档加载此模板。
共享加载项在计算机上打开或创建的每个文档上运行。这是共享加载项优于 VSTO 方法的优势所在,尽管有一些需要由开发人员处理且很麻烦的事情(这是权衡)。
胜者
作为任何设计练习的经验法则,没有绝对的胜者。此处也一样。
当以下情况时使用 VSTO:
- 如前所述,您的解决方案不需要处于应用程序级别,并且不需要更高的灵活性(例如,在 Word 应用程序连接到加载项时或完成连接时运行代码等)。
- 您需要管理 shimming 的内置优势(shimming 非常重要且痛苦,尤其是当开发人员不了解 C++ 时)。不仅是 shimming,在共享加载项方法中,开发人员需要管理的许多小细节都已内置其中,例如为命令栏按钮添加透明图标。
- 在许多情况下,“Word 模板”方法可以解决问题,除非您想修改模板本身。例如,如果您想根据条件检查移除包含代码的模板,即不希望加载项运行,您就无法删除位于启动文件夹中的模板。这种灵活性仅在共享加载项方法中可用。
- 您不想担心 Office 版本兼容性。VSTO 支持 Office 2003 及更高版本的所有 Office 版本。因此,开发人员无需担心使加载项与所有版本兼容。
如果满足以下条件,请使用共享加载项方法:
- 您的解决方案需要在应用程序级别运行,即您需要代码在每个文档上运行。
- 您需要更高的灵活性,并能够访问加载项和 Word 的启动过程。
- 您可以使您的加载项在 Office 2000 及更高版本(之前没有加载项概念)的任何 Office 版本上运行,尽管这需要额外的工作。
- 但请注意,在将解决方案成功部署到最终用户计算机上之前,可能会遇到许多问题,尤其是在全新安装的计算机上。
- 开发方面的问题,如 shimming、无法删除已添加的工具栏/菜单、为命令栏按钮和菜单项添加透明图标。
- 调试方面,您需要将WINWORD.EXE附加到 VS 才能进行调试。但当您启动 Word 并尝试将其附加到 VS 时,所有启动代码都已执行。
- 部署方面,所有更新都需要在运行加载项之前安装,否则加载项可能会被禁用。最糟糕的是,用户永远不会收到加载项被禁用的原因通知。
但对于这些问题中的每一个都有解决方案,并且是可实现的,尽管并不容易。
总的来说,VSTO 解决方案非常具体,而共享加载项方法则更通用。最终,决定取决于您的需求。