在 Office 解决方案中编写代码
与 Visual Studio 中其他类型的项目相比,在 Office 项目中编写代码有一些不同之处。 许多这些不同之处都与向托管代码公开 Office 对象模型的方式相关。 其他不同之处与 Office 项目的设计相关。
**适用于:**本主题中的信息适用于 Microsoft Office 2010 和 2007 Microsoft Office system 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
托管代码和 Office 编程
Automation 是使创建集成的 Microsoft Office 解决方案成为可能的关键技术,此项技术是组件对象模型 (COM) 技术的一部分。 Automation 使您可以使用代码创建和控制由支持相应的编程接口的任何应用程序、DLL 或 ActiveX 控件所公开的软件对象。
了解主互操作程序集
Microsoft Office 应用程序向 Automation 公开了许多功能。 但是,您不能直接使用托管代码(例如 Visual Basic 或 C#)实现 Office 应用程序的自动化。 若要使用托管代码实现 Office 应用程序的自动化,您必须使用 Office 主互操作程序集 (PIA)。 主互操作程序集使托管代码可以与 Office 应用程序的基于 COM 的对象模型进行交互。
每个 Microsoft Office 应用程序都有 PIA。 在 Visual Studio 中创建 Office 项目时,会自动将对相应 PIA 的引用添加到项目。 若要从项目中自动运行其他 Office 应用程序的功能,您必须手动添加对相应 PIA 的引用。 有关更多信息,请参见如何:通过主互操作程序集面向 Office 应用程序。
在设计时和运行时使用主互操作程序集
必须在开发计算机上的全局程序集缓存中安装并注册 Office PIA,才能执行大多数开发任务。 有关更多信息,请参见将计算机配置为开发 Office 解决方案。
若要运行面向 .NET Framework 3.5 的 Office 解决方案,还必须在最终用户计算机上安装 PIA。 不过,若要运行面向 .NET Framework 4 的 Office 解决方案,则无需在最终用户计算机上安装 Office PIA。 有关更多信息,请参见设计和创建 Office 解决方案。
使用主互操作程序集中的类型
Office PIA 包含一些类型的组合,这些类型公开不应直接在您的代码中使用的 Office 应用程序和其他基础结构类型的对象模型。 有关 Office PIA 中类型的概述,请参见 Overview of Classes and Interfaces in the Office Primary Interop Assemblies。
由于 Office PIA 中的类型对应于基于 COM 的对象模型中的类型,因此使用这些类型的方式通常与其他托管类型不同。 例如,调用在 Office 主互操作程序集中有可选参数的方法时,您采用的方式就取决于在项目中所使用的编程语言。 有关更多信息,请参见下列主题:
Office 项目的编程模型
所有 Office 项目都包括一个或多个生成的类,这些类为代码提供入口点。 这些类还提供对宿主应用程序的对象模型的访问,以及对诸如操作窗格和自定义任务窗格等功能的访问。
了解生成的类
在 Excel 和 Word 的文档级项目中,生成的类类似于应用程序的对象模型中的顶级对象。 例如,Word 文档项目中生成的 ThisDocument 类提供的成员与 Word 对象模型中 Microsoft.Office.Interop.Word.Document 类提供的成员相同。 有关文档级项目中生成的类的更多信息,请参见对文档级自定义项进行编程。
应用程序级项目提供一个名为 ThisAddIn 的生成的类。 此类并不类似于宿主应用程序的对象模型中的类, 而是表示外接程序本身,并且提供一些成员,您可以使用这些成员来访问宿主应用程序的对象模型,以及可用于外接程序的其他功能。 有关更多信息,请参见应用程序级外接程序编程。
Office 项目中所有生成的类包括 Startup 和 Shutdown 事件处理程序。 若要开始编写代码,您通常会向这些事件处理程序中添加代码。 要初始化外接程序,可以向 Startup 事件处理程序中添加代码。 要清除由外接程序使用的资源,可以向 Shutdown 事件处理程序中添加代码。 有关更多信息,请参见 Office 项目中的事件。
在运行时访问生成的类
在加载 Office 解决方案时,Visual Studio Tools for Office Runtime将在项目中实例化每个生成的类。 可以使用 Globals 类从项目中的任何代码访问这些对象。 例如,可以使用 Globals 类,从应用程序级外接程序中功能区按钮的事件处理程序中调用 ThisAddIn 类中的代码。
有关更多信息,请参见对 Office 项目中对象的全局访问。