ドキュメント レベルのカスタマイズにおけるネイティブな Office オブジェクトからの拡張オブジェクトの取得
更新 : 2008 年 7 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 プロジェクトの種類
Microsoft Office のバージョン
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
Office イベントのイベント ハンドラの多くは、イベントを発生させたブック、ワークシート、または文書を表すネイティブな Office オブジェクトを受け取ります。場合によっては、ドキュメント レベルのカスタマイズでブックや文書がイベントを発生させたときにのみ、コードを実行することができます。たとえば、Excel のドキュメント レベルのカスタマイズで、ユーザーがカスタマイズ内のいずれかの Microsoft.Office.Tools.Excel.Worksheet ホスト項目をアクティブにしたときにはコードを実行し、同時に開いている他のブック内のワークシートをアクティブにしたときにはコードを実行しないようにすることができます。
Visual Studio 2008 Service Pack 1 (SP1) 以降、ネイティブな Office オブジェクトを取得するときに、そのオブジェクトがドキュメント レベルのカスタマイズ内のホスト項目または Microsoft.Office.Tools.Excel.ListObject ホスト コントロールに拡張されているかどうかをテストできるようになりました。
ホスト項目とホスト コントロールは、Word または Excel のオブジェクト モデルにネイティブに存在するオブジェクト (ネイティブな Office オブジェクトと呼ばれます) に対して機能を追加する Visual Studio Tools for Office オブジェクトです。ホスト項目とホスト コントロールは、まとめて拡張オブジェクトとも呼ばれます。ホスト項目とホスト コントロールの詳細については、「ホスト項目とホスト コントロールの概要」を参照してください。
GetVstoObject メソッドと HasVstoObject メソッドの使用
ネイティブな Office オブジェクトをテストするには、次のいずれかのネイティブな Office オブジェクトのインスタンスの HasVstoObject メソッドと GetVstoObject メソッドを使用します。
ネイティブな Office オブジェクトがカスタマイズに拡張オブジェクトを保有しているかどうかだけを確認する場合には、HasVstoObject メソッドを使用します。このメソッドは、ネイティブな Office オブジェクトに拡張オブジェクトがある場合は true を返し、それ以外の場合は false を返します。
拡張オブジェクトを取得する場合は、GetVstoObject メソッドを使用します。このメソッドは、ネイティブな Office オブジェクトに拡張オブジェクトがある場合は Microsoft.Office.Tools.Excel.ListObject、Microsoft.Office.Tools.Excel.Workbook、Microsoft.Office.Tools.Excel.Worksheet、Microsoft.Office.Tools.Word.Document のいずれかのオブジェクトを返します。それ以外の場合、GetVstoObject は null を返します。たとえば、Microsoft.Office.Interop.Word.Document が Word 文書プロジェクトの文書の基になるオブジェクトである場合、Microsoft.Office.Interop.Word.Document オブジェクトの GetVstoObject メソッドは Microsoft.Office.Tools.Word.Document を返します。
ドキュメント レベルのソリューションでは、GetVstoObject を使用して実行時に新しいホスト項目を作成することはできません。このメソッドを使用できるのは、デザイン時にプロジェクトで生成した既存のホスト項目にアクセスするときだけです。詳細については、「ホスト項目およびホスト コントロールのプログラム上の制限事項」を参照してください。
アプリケーション レベルのプロジェクトでは、GetVstoObject メソッドを使用して実行時に新しいホスト項目を生成できます。詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。
メモ : |
---|
GetVstoObject メソッドと HasVstoObject メソッドを使用するには、コード ファイルの先頭に、Microsoft.Office.Tools.Excel.Extensions 名前空間または Microsoft.Office.Tools.Word.Extensions 名前空間に対する using ステートメント (C# の場合) または Imports ステートメント (Visual Basic の場合) を追加する必要があります。GetVstoObject メソッドと HasVstoObject メソッドは、Visual Studio Tools for Office ランタイムに拡張メソッドとして実装されます。前に説明したステートメントを使用することで、これらのメソッドを呼び出すことができます。 |
ホスト項目がイベントを発生させたかどうかの確認
HasVstoObject メソッドおよび GetVstoObject メソッドのコード例を次に示します。どちらの例も、Excel ブック プロジェクトの ThisWorkbook クラスの SheetActivate イベントを処理します。
最初の例では、Sh パラメータと既定のホスト項目の InnerObject プロパティとの比較によって、いずれかの Microsoft.Office.Tools.Excel.Worksheet ホスト項目がアクティブにされたかどうかを確認します。
Sub ThisWorkbook_SheetActivate1(ByVal Sh As Object) Handles Me.SheetActivate
Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
If Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh) Then
vstoWorksheet = Globals.Sheet1
ElseIf Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh) Then
vstoWorksheet = Globals.Sheet2
ElseIf Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh) Then
vstoWorksheet = Globals.Sheet3
End If
If vstoWorksheet IsNot Nothing Then
' Do something with the VSTO worksheet here.
End If
End Sub
void ThisWorkbook_SheetActivate1(object Sh)
{
Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
if (Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh))
vstoWorksheet = Globals.Sheet1;
else if (Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh))
vstoWorksheet = Globals.Sheet2;
else if (Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh))
vstoWorksheet = Globals.Sheet3;
if (vstoWorksheet != null)
{
// Do something with the VSTO worksheet here.
}
}
2 番目の例では、Sh パラメータの HasVstoObject メソッドと GetVstoObject メソッドを使用して、このプロセスを簡略化します。
Sub ThisWorkbook_SheetActivate2(ByVal Sh As Object) Handles Me.SheetActivate
Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
Dim interopWorksheet As Microsoft.Office.Interop.Excel.Worksheet = _
CType(Sh, Microsoft.Office.Interop.Excel.Worksheet)
If interopWorksheet IsNot Nothing AndAlso _
interopWorksheet.HasVstoObject() Then
vstoWorksheet = interopWorksheet.GetVstoObject()
End If
If vstoWorksheet IsNot Nothing Then
' Do something with the VSTO worksheet here.
End If
End Sub
void ThisWorkbook_SheetActivate2(object Sh)
{
Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
Microsoft.Office.Interop.Excel.Worksheet interopWorksheet =
Sh as Microsoft.Office.Interop.Excel.Worksheet;
if (interopWorksheet != null && interopWorksheet.HasVstoObject())
{
vstoWorksheet = interopWorksheet.GetVstoObject();
}
if (vstoWorksheet != null)
{
// Do something with the VSTO worksheet here.
}
}
参照
概念
アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張
参照
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2008 年 7 月 |
トピックを追加 |
SP1 機能変更 |