在 Office 解决方案中编写代码

在 Office 项目中编写代码的某些方面与 Visual Studio 中的其他类型的项目不同。 其中许多差异都与 Office 对象模型向托管代码公开的方式相关。 其他差异与 Office 项目的设计相关。

适用于: 本主题中的信息适用于文档级项目和 VSTO 外接程序项目。 请参阅 Office 应用程序和项目类型提供的功能

托管代码和 Office 编程

使创建集成Microsoft Office 解决方案的关键技术是自动化,这是组件对象模型(COM)技术的一部分。 通过自动化,可以使用代码创建和控制任何支持相应编程接口的应用程序、DLL 或 ActiveX 控件公开的软件对象。

了解主互操作程序集

Microsoft Office 应用程序向自动化公开其大部分功能。 但是,不能直接使用托管代码(如 Visual Basic 或 C#)自动执行 Office 应用程序。 若要使用托管代码自动执行 Office 应用程序,必须使用 Office 主互作程序集(PIA)。 主互作程序集使托管代码能够与 Office 应用程序的基于 COM 的对象模型进行交互。

每个Microsoft Office 应用程序都有一个 PIA。 在 Visual Studio 中创建 Office 项目时,会自动向项目添加对相应 PIA 的引用。 若要自动执行项目中其他 Office 应用程序的功能,必须手动添加对相应 PIA 的引用。 有关详细信息,请参阅 如何:通过主互操作程序集定位 Office 应用程序

在设计时和运行时使用主要互操作性程序集

必须在开发计算机上的全局程序集缓存中安装并注册 Office PIA 才能执行大多数开发任务。 有关详细信息,请参阅 配置计算机以开发 Office 解决方案

最终用户计算机上不需要 Office PIA 才能运行面向 .NET Framework 4 或更高版本的 Office 解决方案。 有关详细信息,请参阅 “设计和创建 Office 解决方案”。

在主互操作程序集内使用类型

Office PIA 包含类型的组合,这些类型公开了 Office 应用程序的对象模型,以及不打算直接在代码中使用的其他基础结构类型。 有关 Office PIA 中类型的概述,请参阅 Office 主互作程序集中的类和接口概述

由于 Office PIA 中的类型对应于基于 COM 的对象模型中的类型,因此使用这些类型的方式通常不同于其他托管类型。 例如,在 Office 主互操作程序集调用包含可选参数的方法时,所使用的编程语言会对此有所影响。 有关详情,请参阅以下主题:

Office 项目的程序模型

所有 Office 项目都包含一个或多个生成的类,这些类提供代码的入口点。 这些类还提供对主机应用程序的对象模型的访问权限,以及访问作窗格和自定义任务窗格等功能。

了解生成的类

在 Excel 和 Word 的文档级项目中,生成的类类似于应用程序对象模型中的顶级对象。 例如,Word 文档项目中生成的 ThisDocument 类提供与 Word 对象模型中的 Document 类相同的成员。 有关文档级项目中生成的类的详细信息,请参阅 Program 文档级自定义

VSTO 外接程序项目提供名为 ThisAddIn 的生成类。 此类与主机应用程序的对象模型中的类不类似。 这个类本身就是 VSTO 外接程序,它提供成员以便您可以访问主机应用程序的对象模型,并使用 VSTO 外接程序提供的其他功能。有关详细信息,请参阅 编程 VSTO 外接程序

Office 项目中所有生成的类包括 StartupShutdown 事件处理程序。 若要开始编写代码,通常在这些事件处理程序中添加代码。 若要初始化 VSTO 外接程序,可以将代码添加到 Startup 事件处理程序。 若要清理 VSTO 外接程序使用的资源,可以将代码添加到 Shutdown 事件处理程序。 有关详细信息,请参阅 Office 项目中的事件

在运行时访问生成的类

加载 Office 解决方案后,Visual Studio Tools for Office 运行时会实例化项目中生成的每个类。 可以通过使用 Globals 类从项目中的任何代码访问这些对象。 例如,可以使用Globals类从 VSTO 外接程序中功能区按钮的事件处理程序中调用ThisAddIn类中的代码。

有关详细信息,请参阅 全局访问 Office 项目中的对象

Office 解决方案中的命名空间注意事项

创建项目后,无法更改 Office 项目 的默认命名空间 (或 Visual Basic 中的 根命名空间 )。 默认命名空间将始终与创建项目时指定的项目名称匹配。 如果重命名项目,则默认命名空间不会更改。 有关项目中的默认命名空间的详细信息,请参阅应用程序页、项目设计器(C#)应用程序页、项目设计器(Visual Basic)。

更改 C# 项目中主机项类的命名空间

主机项类(例如,ThisAddInThisWorkbookThisDocument类)在 Visual C# Office 项目中有自己的命名空间。 默认情况下,项目中主机项的命名空间与创建项目时指定的项目名称匹配。

若要更改 Visual C# Office 项目中主机项的命名空间,请使用 Host Item 属性的命名空间 。 有关详细信息,请参阅 Office 项目中的属性

Office 项目中支持的编程语言

Visual Studio 中的 Office 项目模板仅支持 Visual Basic 和 Visual C# 编程语言。 因此,这些项目模板仅在 Visual Studio 中“新建项目”对话框的 Visual BasicVisual C# 节点下可用。 有关详细信息,请参阅 如何:在 Visual Studio 中创建 Office 项目

语言选择和 Office 编程

Microsoft开发 Office 和 Visual Basic for Applications(VBA)以协同工作,以优化应用程序自定义的工作流。 Visual Basic 继承了其中一些开发。 例如,Visual Basic 支持可选参数,这意味着在Microsoft Office 主互作程序集中调用某些方法时,可以编写更少的代码,而不是使用 Visual C# 时。

在 Office 解决方案中使用 Visual Basic 与 Visual C# 进行编程

可以使用 Visual Basic 或 Visual C# 创建 Office 解决方案。 由于Microsoft Office 对象模型旨在与 Microsoft Visual Basic for Applications(VBA)一起使用,因此 Visual Basic 开发人员可以使用 Microsoft Office 应用程序公开的对象轻松工作。 Visual C# 开发人员可以使用与 Visual Basic 开发人员相同的大多数功能,但在某些情况下,他们必须编写其他代码才能使用 Office 对象模型。 Office 开发中的基本编程功能与使用 Visual Basic 和 C# 编写的托管代码之间也存在一些差异。

Visual Basic 和 Visual C 之间的主要区别#

下表显示了 Visual Basic 和 Visual C# 在 Office 开发中的主要差异。

功能 / 特点 Description Visual Basic 支持 Visual C# 支持
可选参数 许多Microsoft Office 方法具有调用该方法时不需要的参数。 如果未为参数传递任何值,则使用默认值。 Visual Basic 支持可选参数。 在大多数情况下,Visual C# 支持可选参数。 有关详细信息,请参阅 Office 解决方案中的可选参数
按引用传递参数 大多数 Microsoft Office 主互操作程序集中的可选参数可以通过值传递。 但是,在某些主要互操作程序集中,接受引用类型的可选参数必须通过引用传递。

有关值和引用类型参数的详细信息,请参阅按值传递参数以及按引用(适用于 Visual Basic)传递参数(C# 编程指南)。
无需执行其他工作即可按引用传递参数。 Visual Basic 编译器在必要时通过引用自动传递参数。 在大多数情况下,Visual C# 编译器在必要时通过引用自动传递参数。 有关详细信息,请参阅 Office 解决方案中的可选参数
参数化属性 某些属性接受参数,并充当只读函数。 Visual Basic 支持接受参数的属性。 Visual C# 支持接受参数的属性。
迟绑定 后期绑定涉及确定运行时对象的属性,而不是在设计时将变量强制转换为对象类型。 Option Strict 关闭时,Visual Basic 执行后期绑定。 启用 Option Strict 时,必须显式转换对象并使用命名空间中的 System.Reflection 类型来访问后期绑定成员。 有关详细信息,请参阅 Office 解决方案中的延迟绑定 Visual C# 在面向 .NET Framework 4 的项目中执行后期绑定。 有关详细信息,请参阅 Office 解决方案中的延迟绑定

Office 开发和托管代码之间的主要区别

下表显示了在 Visual Basic 或 Visual C# 中编写的 Office 开发和托管代码之间的主要差异。

功能 / 特点 Description Visual Basic 和 Visual C# 支持
数组索引 Microsoft Office 应用程序中,集合的数组的下限从 1 开始。 Visual Basic 和 Visual C# 使用基于 0 的数组。 有关详细信息,请参阅 数组(C# 编程指南)Visual Basic 中的数组 若要访问 Microsoft Office 应用程序的对象模型中集合的第一项,请使用索引 1 而不是 0。