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

更新 : 2007 年 11 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • アプリケーション レベルのプロジェクト

Microsoft Office のバージョン

  • 2007 Microsoft Office system

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

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

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

2007 Microsoft Office system のアプリケーションでは、COM アドインで特定のユーザー インターフェイス (UI: User Interface) 機能をカスタマイズするために実装できる複数の機能拡張インターフェイスが定義されています。Visual Studio Tools for Office では、これらのインターフェイスを自動的に実装し、その代わりに使用できるクラスとデザイナを提供することにより、このプロセスが簡略化されています。ただし、機能拡張インターフェイスをアドインに直接実装することもできます。

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

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

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

インターフェイス

説明

アプリケーション

Microsoft.Office.Core.IRibbonExtensibility

リボン UI をカスタマイズするには、このインターフェイスを実装します。詳細については、2007 Microsoft Office ドキュメントの「IRibbonExtensibility Object」を参照してください。

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

Excel 2007

InfoPath 2007

Outlook 2007

PowerPoint 2007

Word 2007

Microsoft.Office.Core.ICustomTaskPaneConsumer

カスタム作業ウィンドウを作成するには、このインターフェイスを実装します。詳細については、2007 Microsoft Office ドキュメントの「ICustomTaskPaneConsumer Object」を参照してください。

Excel 2007

Outlook 2007

PowerPoint 2007

Word 2007

Microsoft.Office.Interop.Outlook.FormRegionStartup

Outlook フォーム領域を作成するには、このインターフェイスを実装します。詳細については、2007 Microsoft Office ドキュメントの「FormRegionStartup Interface」を参照してください。

Outlook 2007

Microsoft.Office.Core.IBlogExtensibilityMicrosoft.Office.Core.EncryptionProviderMicrosoft.Office.Core.SignatureProvider など、2007 Microsoft Office system のアプリケーションで定義されているその他の機能拡張インターフェイスもいくつかあります。Visual Studio Tools for Office では、このようなインターフェイスのアドインへの実装はサポートされていません。

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

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

Microsoft.Office.Core.IRibbonExtensibility インターフェイスおよび Microsoft.Office.Core.ICustomTaskPaneConsumer インターフェイスを Excel のアドインに実装する方法を示すサンプル アプリケーションについては、「ランタイム サービスのサンプル」を参照してください。

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

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

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

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

    Bb608601.alert_note(ja-jp,VS.90).gifメモ :

    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 の実装方法の詳細については、2007 Microsoft Office ドキュメントの「Creating Custom Task Panes in the 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 Tools for Office プロジェクトを作成する

概念

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

Office ソリューションの開発

AddIn ホスト項目

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

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