对文档级自定义项进行编程

使用文档级自定义项扩展 Microsoft Office Word 或 Microsoft Office Excel 时,可以执行以下任务:

  • 通过使用应用程序的对象模型来实现应用程序的自动化。

  • 向文档图面添加控件。

  • 从自定义项程序集中调用文档中的 Visual Basic for Applications (VBA) 代码。

  • 从 VBA 中调用自定义项程序集内的代码。

  • 当文档位于未安装 Microsoft Office 的服务器上时,管理该文档的某些方面。

  • 自定义应用程序的用户界面 (UI)。

**适用于:**本主题中的信息适用于以下应用程序的文档级项目:Excel 2007 和 Excel 2010;Word 2007 和 Word 2010。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

与 Visual Studio 中其他类型的项目相比,在文档级项目中编写代码有一些不同之处。 其中的许多不同是由向托管代码公开 Office 对象模型的方式引起的。 有关更多信息,请参见在 Office 解决方案中编写代码

有关文档级自定义项和可使用 Visual Studio 中的 Office 开发工具创建的其他类型的解决方案的常规信息,请参见 Office 解决方案开发概述

在文档级项目中使用生成的类

创建文档级项目时,Visual Studio 将在该项目中自动生成一个可用来开始编写代码的类。 Visual Studio 将为 Word 和 Excel 生成不同的类:

  • 在 Word 的文档级项目中,默认情况下此类被称为 ThisDocument。

  • Excel 的文档级项目具有多个生成的类:工作簿自身具有一个类,每个工作表具有一个类。 默认情况下,这些类具有以下名称:

    • ThisWorkbook

    • Sheet1

    • Sheet2

    • Sheet3

生成的类包括打开或关闭文档时调用的事件处理程序。 若要在打开文档时运行代码,请将代码添加到 Startup 事件处理程序中。 若要在即将关闭文档时运行代码,请将代码添加到 Shutdown 事件处理程序中。 有关更多信息,请参见 Office 项目中的事件

了解生成的类的设计

在面向 .NET Framework 3.5 的项目中,生成的类从 Visual Studio Tools for Office Runtime中的下列宿主项类派生其大多数成员和行为: 

  • ThisDocument:派生自 Microsoft.Office.Tools.Word.Document

  • ThisWorkbook:派生自 Microsoft.Office.Tools.Excel.Workbook

  • Sheetn:派生自 Microsoft.Office.Tools.Excel.Worksheet

宿主项是 Office 项目中位于对象模型层次结构顶部的类型,它们扩展了 Office 主互操作程序集 (PIA) 中对应对象的行为。 有关宿主项的更多信息,请参见宿主项和宿主控件概述

在面向 .NET Framework 4 的项目中,Visual Studio Tools for Office Runtime中的宿主项类型是接口,因此生成的类无法从它们派生其实现。 相反,生成的类从下列基类派生其大多数成员:

这些基类将对其成员的所有调用重定向到 Visual Studio Tools for Office Runtime中对应宿主项接口的内部实现。 例如,如果您调用 ThisDocument 类的 Protect 方法,则 Microsoft.Office.Tools.Word.DocumentBase 类会将此调用重定向到 Visual Studio Tools for Office Runtime 中 Microsoft.Office.Tools.Word.Document 接口的内部实现中。有关面向 .NET Framework 3.5 和 .NET Framework 4 的项目在 Visual Studio Tools for Office Runtime 中有何区别的更多信息,请参见 Visual Studio Tools for Office Runtime 概述

访问宿主应用程序的对象模型

若要访问宿主应用程序的对象模型,请在项目中使用生成的类的成员。 这些类中的每个类均对应于 Excel 或 Word 对象模型中的一个对象,并且,它们包含的属性、方法和事件大部分相同。 例如,Word 文档级项目中的 ThisDocument 类提供的成员与 Word 对象模型中的 Microsoft.Office.Interop.Word.Document 对象提供的成员大部分相同。

下面的代码示例演示如何使用 Word 对象模型保存作为 Word 文档级自定义项的一部分的文档。 将从 ThisDocument 类中运行此示例。

Me.Save()
this.Save();

若要从 ThisDocument 类以外执行相同的操作,请使用 Globals 对象访问 ThisDocument 类。 例如,如果要在操作窗格 UI 中包含一个**“保存”**按钮,则可以将此代码添加到操作窗格代码文件中。

Globals.ThisDocument.Save()
Globals.ThisDocument.Save();

由于 ThisDocument 类从 Microsoft.Office.Tools.Word.Document 宿主项获取其大多数成员,因此在此代码中调用的 Save 方法实际上是 Microsoft.Office.Tools.Word.Document 宿主项的 Save 方法。 此方法与 Word 对象模型中的 Microsoft.Office.Interop.Word.Document 对象的 Save 方法相对应。

有关使用 Word 和 Excel 的对象模型的更多信息,请参见 Word 对象模型概述Excel 对象模型概述

有关 Globals 对象的更多信息,请参见对 Office 项目中对象的全局访问

向文档添加控件

若要自定义文档的 UI,可以向文档图面添加 Windows 窗体控件或“宿主控件”。 通过组合不同的控件集并编写代码,可将控件绑定到数据,从用户那里收集信息并对用户操作做出响应。

宿主控件是扩展 Word 和 Excel 对象模型中的某些对象的类。 例如,Microsoft.Office.Tools.Excel.ListObject 宿主控件提供 Excel 中 Microsoft.Office.Interop.Excel.ListObject 的所有功能。 但是,Microsoft.Office.Tools.Excel.ListObject 宿主控件还具有附加的事件和数据绑定功能。

有关更多信息,请参见宿主项和宿主控件概述Office 文档上的 Windows 窗体控件概述

结合 VBA 和文档级自定义项

可以使用作为文档级自定义项一部分的文档中的 VBA 代码。 您可以从自定义程序集调用文档中的 VBA 代码,还可以配置项目以使文档中的 VBA 代码能够调用自定义项程序集中的代码。

有关更多信息,请参见结合 VBA 和文档级自定义项

在服务器上管理文档

您可以在未安装 Microsoft Office Word 或 Microsoft Office Excel 的服务器上管理文档级自定义项的多个不同方面。 例如,可以访问并修改文档数据缓存中的数据。 还可以管理与文档相关联的自定义项程序集。 例如,可以用编程方式移除文档中的程序集,以使文档不再运行代码,或者可以用编程方式将程序集附加到文档。

有关更多信息,请参见使用 ServerDocument 类管理服务器上的文档

自定义 Microsoft Office 应用程序的用户界面

可以通过以下方式使用文档级自定义项自定义 Word 和 Excel 的 UI:

有关自定义 Microsoft Office 应用程序的 UI 的更多信息,请参见 Office UI 自定义

请参见

概念

使用 ServerDocument 类管理服务器上的文档

从文档级自定义项中的本机 Office 对象获取扩展对象

在 Office 解决方案中编写代码

其他资源

Office 文档上的控件

结合 VBA 和文档级自定义项