次の方法で共有


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

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

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

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

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

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

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

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

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

インターフェイス

説明

アプリケーション

Microsoft.Office.Core.IRibbonExtensibility

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

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

Excel 2007 および Excel 2010

InfoPath 2010

Outlook 2007 および Outlook 2010

PowerPoint 2007 および PowerPoint 2010

Project 2010

Visio 2010

Word 2007 および Word 2010

Microsoft.Office.Core.ICustomTaskPaneConsumer

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

Excel 2007 および Excel 2010

Outlook 2007 および Outlook 2010

PowerPoint 2007 および PowerPoint 2010

Word 2007 および Word 2010

Microsoft.Office.Interop.Outlook.FormRegionStartup

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

Outlook 2007 および 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 マネージャーのサンプルを参照してください。

機能拡張インターフェイスの実装例

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

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

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

    注意

    TaskPaneUI クラスを COM に公開するには、プロジェクトの [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", Type.Missing);
            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 でのカスタム作業ウィンドウの作成)」を参照してください。

RequestService メソッドのオーバーライド例

前のコード例で使用した 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 開発のサンプルとチュートリアル