程序 VSTO 外接程序

通过创建 VSTO 外接程序扩展 Microsoft Office 应用程序时,可以直接接针对项目中的 ThisAddIn 类编写代码。 此类可用于执行下列任务,例如:访问 Microsoft Office 主机应用程序的对象模型、自定义应用程序的用户界面 (UI) 和向其他 Office 解决方公开 VSTO 外接程序中的对象。

适用于: 本主题中的信息适用于 VSTO 外接程序项目。 有关详细信息,请参阅办公室应用程序和项目类型提供的功能。

在 VSTO 外接程序项目中编写代码与在 Visual Studio 中编写其他类型项目的代码在某些方面存在不同。 其中许多差异是由 Office 对象模型公开给托管代码的方式引起的。 有关详细信息,请参阅办公室解决方案中的编写代码。

有关使用 Visual Studio 中的办公室开发工具创建的 VSTO 外接程序和其他类型的解决方案的一般信息,请参阅办公室解决方案开发概述(VSTO)。

使用 ThisAddIn 类

你可以在 ThisAddIn 类中开始编写 VSTO 外接程序代码。 Visual Studio 会在 VSTO 外接程序项目中的 ThisAddIn.vb (在 Visual Basic)或 ThisAddIn.cs (在 C#)代码文件中自动生成此类。 Microsoft 办公室应用程序加载 VSTO 外接程序时,用于办公室运行时的 Visual Studio Tools 会自动实例化此类。

ThisAddIn 类中有两个默认的事件处理程序。 若要在加载 VSTO 外接程序后运行代码,请将代码添加到 ThisAddIn_Startup 事件处理程序。 若要在卸载 VSTO 外接程序前运行代码,请将代码添加到 ThisAddIn_Shutdown 事件处理程序。 有关这些事件处理程序的详细信息,请参阅办公室项目中的事件。

注意

在 Outlook 中,卸载 VSTO 外接程序时默认情况下不会始终调用 ThisAddIn_Shutdown 事件处理程序。 有关详细信息,请参阅办公室项目中的事件。

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

若要访问主机应用程序的对象模型,请使用 Application 类的 ThisAddIn 字段。 此字段会返回一个表示主机程序当前实例的对象。 下表列出了每个 VSTO 外接程序项目中 Application 字段的返回值类型。

主机应用程序 返回值类型
Microsoft Office Excel Application
Microsoft Office InfoPath Application
Microsoft Office Outlook Application
Microsoft Office PowerPoint 应用程序
Microsoft Office Project Microsoft.Office.Interop.MSProject.Application
Microsoft Office Visio Microsoft.Office.Interop.Visio.Application
Microsoft Office Word Application

下面的代码示例演示如何使用Application字段在 VSTO 外接程序中为 Microsoft 办公室 Excel 创建新工作簿。 此示例应从 ThisAddIn 类运行。

Excel.Workbook newWorkbook = this.Application.Workbooks.Add(System.Type.Missing);

若要从 ThisAddIn 类的外部执行相同操作,请使用 Globals 对象访问 ThisAddIn 类。 有关该Globals对象的详细信息,请参阅对办公室项目中对象的全局访问。

Excel.Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Add(System.Type.Missing);

有关特定 Microsoft Office 应用程序的对象模型的详细信息,请参阅以下主题:

办公室应用程序启动时访问文档

并非所有办公室 2010 应用程序在启动文档时都会自动打开文档,并且办公室 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 事件的默认事件处理程序。 有关详细信息,请参阅办公室项目中的事件。
运行代码以清理 VSTO 外接程序在被卸载前使用的资源。 将代码添加到 ThisAddIn_Shutdown 方法。 这是 Shutdown 事件的默认事件处理程序。 有关详细信息,请参阅办公室项目中的事件。 注意: 在 Outlook 中,在 ThisAddIn_Shutdown 卸载 VSTO 外接程序时,不会始终调用事件处理程序。 有关详细信息,请参阅办公室项目中的事件。
显示自定义任务窗格。 使用 CustomTaskPanes 字段。 有关详细信息,请参阅 “自定义任务”窗格
向其他 Microsoft Office 解决方案公开 VSTO 外接程序中的对象。 重写 RequestComAddInAutomationService 方法。 有关详细信息,请参阅来自其他办公室解决方案的 VSTO 外接程序中的调用代码。
通过实现可扩展性接口,在 Microsoft Office 系统中自定义功能。 重写 RequestService 方法以返回实现该接口的类的实例。 有关详细信息,请参阅 使用扩展性接口自定义 UI 功能。 注意: 若要自定义功能区 UI,还可以替代 CreateRibbonExtensibilityObject 该方法。

了解 ThisAddIn 类的设计

在面向 .NET Framework 4 的项目中, AddIn 是一个接口。 ThisAddIn 类是从 AddInBase 类派生的。 此基类将所有调用重定向到 Visual Studio Tools for 办公室 运行时中接口的内部实现AddIn

在 Outlook 的 VSTO 外接程序项目中, ThisAddIn 该类派生自 Microsoft.Office.Tools.Outlook.OutlookAddIn 面向 .NET Framework 3.5 的项目中的类,以及面向 OutlookAddInBase .NET Framework 4 的项目中的类。 这些基类提供了一些附加功能以支持窗体区域。 有关窗体区域的详细信息,请参阅 “创建 Outlook 窗体区域”。

自定义Microsoft 办公室应用程序的用户界面

通过使用 VSTO 外接程序,你能以编程方式自定义 Microsoft Office 应用程序的 UI。 例如,你可以在 Outlook 中自定义功能区、显示自定义任务窗格或创建自定义窗体区域。 有关详细信息,请参阅办公室 UI 自定义

Visual Studio 提供了可用于创建自定义任务窗格、功能区自定义和 Outlook 窗体区域的设计器和类。 这些设计器和类有助于简化自定义这些功能的过程。 有关详细信息,请参阅 自定义任务窗格功能区设计器创建 Outlook 窗体区域

如果你想要以类和设计器不支持的方式自定义这些功能之一,则还可以通过在 VSTO 外接程序中实现 扩展性接口 来自定义这些功能。 有关详细信息,请参阅 使用扩展性接口自定义 UI 功能。

此外,你还可以通过生成扩展文档和工作簿的行为的主机项来修改 Word 文档和 Excel 工作簿的 UI。 这样,你便可以将托管控件添加到文档和工作表。 有关详细信息,请参阅 运行时在 VSTO 外接程序中扩展 Word 文档和 Excel 工作簿。

从其他解决方案调用 VSTO 外接程序中的代码

你可以向其他解决方案(包括其他 Office 解决方案)公开 VSTO 外接程序中的对象。 如果 VSTO 外接程序提供了你希望使其他解决方案能够使用的服务,这一点非常有用。 例如,如果你有用于 Microsoft 办公室 Excel 的 VSTO 外接程序,该外接程序对 Web 服务中的财务数据执行计算,则其他解决方案可以通过在运行时调用 Excel VSTO 外接程序来执行这些计算。

有关详细信息,请参阅来自其他办公室解决方案的 VSTO 外接程序中的调用代码。