機能拡張インターフェイスによる 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 |
---|---|---|
リボン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 |
|
カスタム作業ウィンドウを作成するには、このインターフェイスを実装します。 |
Excel 2013 Outlook 2013 PowerPoint 2013 Word 2013 Excel 2010 Outlook 2010 PowerPoint 2010 Word 2010 |
|
Outlook フォーム領域を作成するには、このインターフェイスを実装します。 |
Outlook 2013 Outlook 2010 |
Microsoft.Office.Core.IBlogExtensibility、Microsoft.Office.Core.EncryptionProvider、Microsoft.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 の相互運用機能に登録] プロパティも設定する必要があります。詳細については、「コンパイル プロパティの管理」を参照してください。
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 でのカスタム作業ウィンドウの作成)」を参照してください。
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 ソリューションからのアプリケーション レベルのアドインのコードの呼び出し