在 Office 解决方案中编写代码
与 Visual Studio 中其他类型的项目相比,在 Office 项目中编写代码有一些不同之处。许多这些不同之处都与向托管代码公开 Office 对象模型的方式相关。其他不同之处与 Office 项目的设计相关。
**适用于:**本主题中的信息适用于 Office 2013 和 Office 2010 的文档级项目和应用程序级项目。请参见按 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 解决方案。
Office 插入样式无需在最终用户计算机上不需要运行面向 .NET Framework 4 或 .NET Framework 4.5的 Office 解决方案。有关更多信息,请参见设计和创建 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 项目中对象的全局访问。
在 Office 解决方案的命名空间注意事项
创建 Office 项目后,您将无法更改 Office 项目的默认命名空间(或 Visual Basic 中的根命名空间)。默认命名空间将始终与创建项目时指定的项目名称匹配。即使重命名项目,默认命名空间也不会改变。有关项目中默认命名空间的更多信息,请参见“项目设计器”->“应用程序”页 (C#) 和“项目设计器” ->“应用程序”页 (Visual Basic)。
更改 C# 项目中宿主项类的命名空间
在 Visual C# Office 项目中,宿主项类(例如,ThisAddIn、ThisWorkbook 或 ThisDocument 类)具有其自己的命名空间。默认情况下,项目中宿主项的命名空间与创建项目时指定的项目名称匹配。
若要更改 Visual C# Office 项目中宿主项的命名空间,请使用**“宿主项的命名空间”**属性。有关更多信息,请参见Office 项目中的属性。
在 Office 项目中支持的编程语言
Visual Studio 中的 Office 项目模板仅支持 Visual Basic 和 Visual C# 编程语言。因此,仅在 Visual Studio 中的**“新建项目”对话框的“Visual Basic”和“Visual C#”**节点下提供这些项目模板。有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目。
语言选择和 Office 编程
Microsoft Office 和 Visual Basic for Applications (VBA) 开发为可协同工作,以便优化应用程序自定义的工作流。Visual Basic 继承了其中一些开发优点。例如,Visual Basic 支持可选参数,这意味着,相对于使用 Visual C# 时而言,您在调用 Microsoft Office 主互操作程序集中的某些方法时所要编写的代码可以更少。
编程与 Visual Basic 与. Visual C# 在 Office 解决方案
可以使用 Visual Basic 或 Visual C# 创建 Office 解决方案。由于 Microsoft Office 对象模型的设计初衷是用于 Microsoft Visual Basic for Applications (VBA),因此 Visual Basic 开发人员可以轻松地使用 Microsoft Office 应用程序公开的对象。在 Visual Studio 2012 中,Visual C# 开发人员可使用的功能与 Visual Basic 开发人员可使用的功能大体相同,但在某些情况下,他们必须编写额外的代码才能使用 Office 对象模型。Office 开发中的基本编程功能与用 Visual Basic 和 C# 编写的托管代码之间也存在一些差异。
Visual Basic 和 Visual C# 之间的主要差异
下表显示了在 Office 开发中 Visual Basic 与 Visual C# 之间的主要差异。
功能 |
描述 |
Visual Basic 支持 |
Visual C# 支持 |
---|---|---|---|
可选参数 |
许多 Microsoft Office 方法都有在调用方法时不是必需的参数。如果没有为参数传递值,则会使用默认值。 |
Visual Basic 支持可选参数。 |
大多数情况下 Visual C# 都支持可选参数。有关更多信息,请参见Office 解决方案中的可选参数。 |
按引用传递参数 |
可以按值传递大多数 Microsoft Office 主互操作程序集中的可选参数。但是,在某些主互操作程序集中,必须按引用传递接受引用类型的可选参数。 有关值类型和引用类型参数的更多信息,请参见通过值和通过引用传递参数 (Visual Basic)(适用于 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 开发与托管代码之间的主要差异
下表显示了 Office 开发与用 Visual Basic 或 Visual C# 编写的托管代码之间的主要差异。
功能 |
描述 |
Visual Basic 和 Visual C# 支持 |
---|---|---|
数组索引 |
集合的数组下限 Microsoft Office 应用程序的从 1. 开始。Visual Basic 和 Visual C# 使用从 0 开始的数组。有关更多信息,请参见数组(C# 编程指南)和数组 (Visual Basic)。 |
若要访问 Microsoft Office 应用程序的对象模型中集合的第一项,请使用索引 1 而非 0。 |