次の方法で共有


機能拡張インターフェイスによる UI 機能のカスタマイズ

Visual StudioのOffice開発ツールには、アプリケーション レベルのアドインにカスタム作業ウィンドウ、リボンのカスタマイズ、およびOutlookフォーム領域を作成するときに使用する、さまざまな実装の詳細を処理するデザイナーとクラスを提供します。ただし、特殊な要件がある場合は、機能ごとに機能拡張インターフェイスを実装することもできます。

対象: このトピックの情報は、Microsoft Office 2013 および Microsoft Office 2010 のアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

機能拡張インターフェイスの概要

Microsoft Officeでは、特定の機能をカスタマイズするために、COMアドインができるリボンのような一連の機能拡張インターフェイスを定義します。これらのインターフェイスは、アクセス可能な機能を完全に制御します。ただし、これらのインターフェイスを実装するには、マネージ コードでの COM 相互運用性に関する知識が必要です。場合によっては、これらのインターフェイスのプログラミング モデルは、.NET Framework に慣れている開発者にとってもわかりにくくなります。

Visual StudioのOfficeプロジェクト テンプレートを使用してアドインを作成すると、リボンのような機能をカスタマイズするために機能拡張インターフェイスを実装する必要はありません。Visual Studio Tools for Office Runtime がこれらのインターフェイスを実装します。Visual Studio に用意されているより直感的なクラスとデザイナーを使用することもできます。ただし、必要に応じて、機能拡張インターフェイスをアドインに直接実装することもできます。

機能拡張インターフェイスの代わりに使用できる Visual Studio のクラスおよびデザイナーの詳細については、「カスタム作業ウィンドウ」、「リボン デザイナー」、および「Outlook フォーム領域の作成」を参照してください。

アドインに実装できる機能拡張インターフェイス

実装できる機能拡張インターフェイスとそれをサポートするアプリケーションを次の表に示します。

Interface

説明

Applications

Microsoft.Office.Core.IRibbonExtensibility

リボンUIをカスタマイズするには、このインターフェイスを実装します。

メモメモ
プロジェクトにリボン (XML) アイテムを追加することにより、アドイン内に Microsoft.Office.Core.IRibbonExtensibility の既定の実装を生成することができます。詳細については、「リボン XML」を参照してください。

Excel 2013

InfoPath 2013

Outlook 2013

PowerPoint 2013

Project 2013

Visio 2013

Word 2013

Excel 2010

InfoPath 2010

Outlook 2010

PowerPoint 2010

Project 2010

Visio 2010

Word 2010

Microsoft.Office.Core.ICustomTaskPaneConsumer

カスタム作業ウィンドウを作成するには、このインターフェイスを実装します。

Excel 2013

Outlook 2013

PowerPoint 2013

Word 2013

Excel 2010

Outlook 2010

PowerPoint 2010

Word 2010

Microsoft.Office.Interop.Outlook.FormRegionStartup

Outlook フォーム領域を作成するには、このインターフェイスを実装します。

Outlook 2013

Outlook 2010

Microsoft.Office.Core.IBlogExtensibilityMicrosoft.Office.Core.EncryptionProviderMicrosoft.Office.Core.SignatureProvider など、Microsoft Office で定義されているその他の機能拡張インターフェイスもいくつかあります。Visual Studio では、Office プロジェクト テンプレートを使用して作成したアドインへのこのようなインターフェイスの実装はサポートされていません。

機能拡張インターフェイスの使用

機能拡張インターフェイスを使用して UI 機能をカスタマイズするには、アドイン プロジェクトに適切なインターフェイスを実装します。次に、RequestService メソッドをオーバーライドし、インターフェイスを実装するクラスのインスタンスを返します。

Microsoft.Office.Core.IRibbonExtensibility インターフェイスおよび Microsoft.Office.Core.ICustomTaskPaneConsumer インターフェイス、および Microsoft.Office.Interop.Outlook.FormRegionStartup インターフェイスを Outlook のアドインに実装する方法を示すサンプル アプリケーションについては、「Office 開発のサンプル」の UI マネージャーのサンプルを参照してください。

Bb608601.collapse_all(ja-jp,VS.110).gif機能拡張インターフェイスの実装例

次のコード例は、カスタム作業ウィンドウの作成を目的とした Microsoft.Office.Core.ICustomTaskPaneConsumer インターフェイスの簡単な実装を示しています。このコードでは 2 つのクラスを定義しています。

  • TaskPaneHelper クラスは、Microsoft.Office.Core.ICustomTaskPaneConsumer を実装することにより、カスタム作業ウィンドウを作成し、表示します。

  • TaskPaneUI クラスは、作業ウィンドウの UI を提供します。TaskPaneUI クラスの属性により、このクラスが COM から参照可能となり、Microsoft Office アプリケーションがこのクラスを検出できるようになります。このコード例では、UI は空の UserControl ですが、コードを変更してコントロールを追加することもできます。

    [!メモ]

    TaskPaneUI クラスを COM に公開するには、プロジェクトの [COM の相互運用機能に登録] プロパティも設定する必要があります。詳細については、「コンパイル プロパティの管理」を参照してください。

Public Class TaskPaneHelper
    Implements Office.ICustomTaskPaneConsumer

    Friend taskPane As Office.CustomTaskPane

    Public Sub CTPFactoryAvailable(ByVal CTPFactoryInst As Office.ICTPFactory) _
        Implements Office.ICustomTaskPaneConsumer.CTPFactoryAvailable

        If CTPFactoryInst IsNot Nothing Then
            ' Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP( _
                "Microsoft.Samples.Vsto.VB.TaskPaneUI", "Contoso")
            taskPane.Visible = True
        End If
    End Sub
End Class

<System.Runtime.InteropServices.ComVisible(True)> _
<System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.VB.TaskPaneUI")> _
<System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")> _
Public Class TaskPaneUI
    Inherits UserControl
End Class
public class TaskPaneHelper : Office.ICustomTaskPaneConsumer
{
    internal Office.CustomTaskPane taskPane;

    public void CTPFactoryAvailable(Office.ICTPFactory CTPFactoryInst)
    {
        if (CTPFactoryInst != null)
        {
            // Create a new task pane.
            taskPane = CTPFactoryInst.CreateCTP(
                "Microsoft.Samples.Vsto.CS.TaskPaneUI",
                "Contoso");
            taskPane.Visible = true;
        }
    }
}

[System.Runtime.InteropServices.ComVisible(true)]
[System.Runtime.InteropServices.ProgId("Microsoft.Samples.Vsto.CS.TaskPaneUI")]
[System.Runtime.InteropServices.Guid("FFA0920E-F7A5-453d-8AB2-249F4C25B4B2")]
public class TaskPaneUI : UserControl
{
}

Microsoft.Office.Core.ICustomTaskPaneConsumer の実装方法の詳細については、Microsoft Office ドキュメントの「Creating Custom Task Panes in the 2007 Office System (2007 Office system でのカスタム作業ウィンドウの作成)」を参照してください。

Bb608601.collapse_all(ja-jp,VS.110).gifRequestService メソッドのオーバーライド例

前のコード例で使用した TaskPaneHelper クラスのインスタンスを返すように RequestService メソッドをオーバーライドする方法を次のコード例に示します。このコードは、serviceGuid パラメーターの値を確認して必要な機能拡張インターフェイスを特定し、そのインターフェイスを実装するオブジェクトを返します。

Friend taskPaneHelper1 As TaskPaneHelper

Protected Overrides Function RequestService( _
    ByVal serviceGuid As Guid) As Object

    If (serviceGuid = GetType(Office.ICustomTaskPaneConsumer).GUID) Then
        If (taskPaneHelper1 Is Nothing) Then
            taskPaneHelper1 = New TaskPaneHelper()
        End If
        Return taskPaneHelper1
    End If

    Return MyBase.RequestService(serviceGuid)
End Function
internal TaskPaneHelper taskPaneHelper1;

protected override object RequestService(Guid serviceGuid)
{
    if (serviceGuid == typeof(Office.ICustomTaskPaneConsumer).GUID)
    {
        if (taskPaneHelper1 == null)
        {
            taskPaneHelper1 = new TaskPaneHelper();
        }
        return taskPaneHelper1;
    }

    return base.RequestService(serviceGuid);
}

参照

処理手順

方法: Visual Studio で Office プロジェクトを作成する

概念

他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し

アプリケーション レベルのアドインのアーキテクチャ

その他の技術情報

Office 開発のサンプルとチュートリアル

アプリケーション レベルのアドインのプログラミング

Office ソリューションの開発