对文档级自定义项进行编程
使用文档级自定义项扩展 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中的宿主项类型是接口,因此生成的类无法从它们派生其实现。 相反,生成的类从下列基类派生其大多数成员:
ThisDocument:派生自 Microsoft.Office.Tools.Word.DocumentBase
ThisWorkbook:派生自 Microsoft.Office.Tools.Excel.WorkbookBase
Sheetn:派生自 Microsoft.Office.Tools.Excel.WorksheetBase
这些基类将对其成员的所有调用重定向到 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:
向文档图面添加宿主控件或 Windows 窗体控件。
有关更多信息,请参见使用扩展对象实现 Word 自动化、使用扩展对象实现 Excel 自动化和Office 文档上的 Windows 窗体控件概述。
向文档添加操作窗格。
有关更多信息,请参见操作窗格概述。
向文档添加智能标记。
提示
在 Excel 2010 和 Word 2010 中已弃用智能标记。 有关更多信息,请参见智能标记概述。
有关更多信息,请参见智能标记概述。
向功能区中添加自定义选项卡。
有关更多信息,请参见功能区概述。
将自定义组添加到功能区上的内置选项卡。
有关更多信息,请参见如何:自定义内置选项卡。
有关自定义 Microsoft Office 应用程序的 UI 的更多信息,请参见 Office UI 自定义。