通过创建 VSTO 外接程序扩展 Microsoft Office 应用程序时,可以直接针对项目中的 ThisAddIn 类编写代码。 可以使用此类执行任务,例如访问 Microsoft Office 主机应用程序的对象模型、自定义应用程序的用户界面(UI),以及向其他 Office 解决方案公开 VSTO 外接程序中的对象。
适用于: 本主题中的信息适用于 VSTO 外接程序项目。 有关详细信息,请参阅 Office 应用程序和项目类型提供的功能。
在 VSTO 外接程序项目中编写代码的某些方面与 Visual Studio 中的其他类型的项目不同。 其中许多差异是由于 Office 对象模型向托管代码公开的方式造成的。 有关详细信息,请参阅 在 Office 解决方案中编写代码。
有关使用 Visual Studio 中的 Office 开发工具创建的 VSTO 外接程序和其他类型的解决方案的一般信息,请参阅 Office 解决方案开发概述(VSTO)。
使用 ThisAddIn 类
可以在类中 ThisAddIn 开始编写 VSTO 外接程序代码。 Visual Studio 会在您的 VSTO 外接程序项目中生成的 ThisAddIn.vb(在 Visual Basic 中)或 ThisAddIn.cs(在 C# 中)代码文件中自动生成此类。 当 Microsoft Office 应用程序加载 VSTO 外接程序时,Visual Studio Tools for Office 运行时会自动实例化此类。
类 ThisAddIn 中有两个默认事件处理程序。 若要在加载 VSTO 外接程序时运行代码,请将代码添加到 ThisAddIn_Startup 事件处理程序。 若要在卸载 VSTO 外接程序之前运行代码,请将代码添加到 ThisAddIn_Shutdown 事件处理程序。 有关这些事件处理程序的详细信息,请参阅 Office 项目中的事件。
注释
在 Outlook 中,默认情况下,卸载 VSTO 外接程序时,不一定会调用 ThisAddIn_Shutdown 事件处理程序。 有关详细信息,请参阅 Office 项目中的事件。
访问主机应用程序的对象模型
若要访问主机应用程序的对象模型,请使用 Application 类的 ThisAddIn 字段。 此字段返回一个对象,该对象表示主机应用程序的当前实例。 下表列出了每个 VSTO 插件项目中 Application 字段的返回值类型。
| 主机应用程序 | 返回值类型 | 
|---|---|
| Microsoft Office Excel | Application | 
| Microsoft Office InfoPath | Application | 
| Microsoft Office Outlook | Application | 
| Microsoft Office PowerPoint | 应用程序 | 
| Microsoft Office 项目 | Microsoft.Office.Interop.MSProject.Application | 
| Microsoft Office Visio | Microsoft.Office.Interop.Visio.Application | 
| Microsoft Office Word | Application | 
下面的代码示例演示如何使用 Application 字段在 VSTO 外接程序中为 Microsoft Office Excel 创建新工作簿。 此示例旨在从 ThisAddIn 类运行。
若要从 ThisAddIn 类外部执行相同的操作,请使用 Globals 对象访问 ThisAddIn 类。 有关该 Globals 对象的详细信息,请参阅 对 Office 项目中对象的全局访问。
Excel.Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Add(System.Type.Missing);
有关特定 Microsoft Office 应用程序的对象模型的详细信息,请参阅以下主题:
在 Office 应用程序启动时访问文档
并非所有 Office 2010 应用程序在启动文档时都会自动打开文档,并且启动文档时,任何 Office 2013 应用程序都不会打开文档。 因此,如果代码需要打开文档,请不要在 ThisAdd-In_Startup 事件处理程序中添加代码。 相反,请将该代码添加到用户创建或打开文档时 Office 应用程序引发的事件。 这样,你可以确保文档在代码进行操作之前已经被打开。
以下代码示例仅在用户创建文档或打开现有文档时,才能在 Word 中使用文档。
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.DocumentOpen +=
new Word.ApplicationEvents4_DocumentOpenEventHandler(WorkWithDocument);
        ((Word.ApplicationEvents4_Event)this.Application).NewDocument +=
            new Word.ApplicationEvents4_NewDocumentEventHandler(WorkWithDocument);  
    }
    
    private void WorkWithDocument(Microsoft.Office.Interop.Word.Document Doc)
    {
        try
        {
            Word.Range rng = Doc.Range(0, 0);
            rng.Text = "New Text";
            rng.Select();
        }
        catch (Exception ex)
        {
            // Handle exception if for some reason the document is not available.
        }
    }
用于执行其他任务的 ThisAddIn 成员
下表描述了其他常见任务,并显示了可以使用 ThisAddIn 类的哪些成员来执行这些任务。
| 任务 | 要使用的成员 | 
|---|---|
| 运行代码以在加载 VSTO 外接程序时初始化 VSTO 外接程序。 | 将代码添加到 ThisAddIn_Startup方法。 这是Startup事件的默认处理程序。 有关详细信息,请参阅 Office 项目中的事件。 | 
| 运行代码以清理 VSTO 外接程序在卸载 VSTO 外接程序之前使用的资源。 | 将代码添加到 ThisAddIn_Shutdown方法。 这是 Shutdown 事件的默认事件处理器。 有关详细信息,请参阅 Office 项目中的事件。 
              注意: 在 Outlook 中,默认情况下,ThisAddIn_Shutdown在卸载 VSTO 外接程序时,不总是会调用事件处理程序。 有关详细信息,请参阅 Office 项目中的事件。 | 
| 显示自定义任务窗格。 | 使用 CustomTaskPanes字段。 有关详细信息,请参阅 “自定义任务”窗格。 | 
| 向其他 Microsoft Office 解决方案公开 VSTO 外接程序中的对象。 | 重写RequestComAddInAutomationService方法。 有关详细信息,请参阅 来自其他 Office 解决方案的 VSTO 外接程序中的呼叫代码。 | 
| 通过实现扩展性接口,在 Microsoft Office 系统中自定义功能。 | 重写RequestService方法,以返回一个实现该接口的类的实例。 有关详细信息,请参阅 使用扩展性接口自定义 UI 功能。 注意: 若要自定义功能区 UI,还可以替代 CreateRibbonExtensibilityObject 该方法。 | 
深入了解 ThisAddIn 类的设计
在面向 .NET Framework 4 的项目中, AddIn 是一个接口。 该 ThisAddIn 类派生自 AddInBase 该类。 此基类将对其成员的所有调用重定向到 Visual Studio Tools for Office 运行时中的接口AddIn的内部实现。
在 Outlook 的 VSTO 外接程序项目中,ThisAddIn 类在面向 .NET Framework 3.5 的项目中派生自 Microsoft.Office.Tools.Outlook.OutlookAddIn 类,而在面向 .NET Framework 4 的项目中派生自 OutlookAddInBase 类。 这些基类提供一些附加功能来支持窗体区域。 有关窗体区域的详细信息,请参阅 “创建 Outlook 窗体区域”。
自定义 Microsoft Office 应用程序的用户界面
可以使用 VSTO 外接程序以编程方式自定义 Microsoft Office 应用程序的 UI。 例如,可以自定义功能区、显示自定义任务窗格或在 Outlook 中创建自定义窗体区域。 有关详细信息,请参阅 Office UI 自定义。
Visual Studio 提供可用于创建自定义任务窗格、功能区自定义项和 Outlook 窗体区域的设计器和类。 这些设计器和类有助于简化自定义这些功能的过程。 有关详细信息,请参阅 自定义任务窗格、 功能区设计器和 创建 Outlook 窗体区域。
如果要以类和设计器不支持的方式自定义其中一项功能,还可以通过在 VSTO 外接程序中实现 扩展性接口 来自定义这些功能。 有关详细信息,请参阅 使用扩展性接口自定义 UI 功能。
此外,还可以通过生成扩展文档和工作簿行为的主机项来修改 Word 文档和 Excel 工作簿的 UI。 这使你可以向文档和工作表添加托管控件。 有关详细信息,请参阅 运行时在 VSTO 外接程序中扩展 Word 文档和 Excel 工作簿。
从其他解决方案调用 VSTO 外接程序中的代码
可以将 VSTO 外接程序中的对象公开给其他解决方案,包括其他 Office 解决方案。 如果您的 VSTO 外接程序提供服务,并且您希望启用其他解决方案使用这些服务,这将非常有用。 例如,如果你有用于 Microsoft Office Excel 的 VSTO 外接程序,该外接程序对 Web 服务中的财务数据执行计算,其他解决方案可以通过在运行时调用 Excel VSTO 外接程序来执行这些计算。
有关详细信息,请参阅 来自其他 Office 解决方案的 VSTO 外接程序中的呼叫代码。