ホスト項目およびホスト コントロールのプログラム上の制限事項
更新 : 2008 年 7 月
対象 |
---|
このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。 ドキュメント レベルのプロジェクト
アプリケーション レベルのプロジェクト
詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。 |
ホスト項目やホスト コントロールはそれぞれ、対応するネイティブな Microsoft Office Word オブジェクトや Microsoft Office Excel オブジェクトと同様に動作するように設計され、さらに追加の機能が備えられています。ただし、ホスト項目やホスト コントロールと、ネイティブな Office オブジェクトの実行時の動作には、基本的な相違点があります。
ホスト項目とホスト コントロールの概要については、「ホスト項目とホスト コントロールの概要」を参照してください。
プログラムによるホスト項目の作成
文書、ブック、またはワークシートを実行時にプログラムで作成したり開いたりしても、その項目はホスト項目ではありません。その新しいオブジェクトは、ネイティブな Office オブジェクトです。たとえば、Add メソッドを使用して実行時に新しい Word 文書を作成すると、それは Microsoft.Office.Tools.Word.Document ホスト項目ではなく、ネイティブな Microsoft.Office.Interop.Word.Document オブジェクトになります。同様に、Add メソッドを使用して実行時に新しいワークシートを作成すると、Microsoft.Office.Tools.Excel.Worksheet ホスト項目ではなく、ネイティブな Microsoft.Office.Interop.Excel.Worksheet オブジェクトが作成されます。
ドキュメント レベルのプロジェクトでは、実行時にホスト項目を作成することはできません。ドキュメント レベルのプロジェクトでのホスト項目の作成は、デザイン時にのみ行うことができます。詳細については、「Document ホスト項目」、「Workbook ホスト項目」、および「Worksheet ホスト項目」を参照してください。
Visual Studio 2008 Service Pack 1 (SP1) 以降、Excel 2007 および Word 2007 用のアプリケーション レベルのアドインでは、実行時に Microsoft.Office.Tools.Word.Document、Microsoft.Office.Tools.Excel.Workbook、または Microsoft.Office.Tools.Excel.Worksheet のホスト項目を生成できるようになりました。詳細については、「アプリケーション レベルのアドインにおける実行時の Word 文書や Excel ブックの拡張」を参照してください。
プログラムによるホスト コントロールの作成
実行時にプログラムによって Microsoft.Office.Tools.Word.Document ホスト項目または Microsoft.Office.Tools.Excel.Worksheet ホスト項目にホスト コントロールを追加できます。詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。
ホスト コントロールを、ネイティブな Microsoft.Office.Interop.Word.Document や Microsoft.Office.Interop.Excel.Worksheet に追加することはできません。
メモ : |
---|
XmlMappedRange、XMLNode、および XMLNodes の各ホスト コントロールを、プログラムによってワークシートや文書に追加することはできません。 |
ホスト項目、ホスト コントロール、ネイティブな Office オブジェクトの相違点について
ホスト項目やホスト コントロールにはそれぞれ、基になる Microsoft Office Word または Microsoft Office Excel のネイティブ オブジェクトがあります。基になるオブジェクトには、ホスト項目またはホスト コントロールの InnerObject プロパティを使用してアクセスできます。ただし、ネイティブな Office オブジェクトをそれに対応するホスト項目またはホスト コントロールにキャストする方法はありません。ネイティブな Office オブジェクトをホスト項目またはホスト コントロールにキャストしようとすると、InvalidCastException がスローされます。
ホスト項目、ホスト コントロール、および基になるネイティブな Office オブジェクトの相違がコードに影響を及ぼす可能性について、いくつかのシナリオを挙げて説明します。
メソッドやプロパティへのホスト コントロールの引き渡し
Word では、ネイティブな Word オブジェクトをパラメータとして渡す必要があるメソッドまたはプロパティにホスト コントロールを渡すことはできません。ホスト コントロールの InnerObject プロパティを使用して、基になるネイティブな Word オブジェクトを返す必要があります。たとえば、Microsoft.Office.Interop.Word.Bookmark オブジェクトをメソッドに渡すには、Microsoft.Office.Tools.Word.Bookmark ホスト コントロールの InnerObject プロパティを渡します。
Excel では、ホスト コントロールの InnerObject プロパティを使用することが必要なケースとして、次の 2 つがあります。
メソッドまたはプロパティが、基になる Excel オブジェクトの受け取りを予期している場合。
ExcelLocale1033Attribute 属性が false に設定されており、メソッドまたはプロパティが、基になる Excel オブジェクトではなく Object の受け取りを予期している場合。
Microsoft.Office.Tools.Excel.NamedRange コントロールを作成し、AutoFill メソッドに渡す例を次に示します。コードは名前付き範囲の InnerObject プロパティを使用して、AutoFill メソッドに必要とされる、基になる Office Microsoft.Office.Interop.Excel.Range を返します。
Me.Range("A1").Value2 = "Monday"
Me.Range("A2").Value2 = "Tuesday"
Dim dayRange As Microsoft.Office.Tools.Excel.NamedRange = _
Me.Controls.AddNamedRange(Me.Range("A1", "A7"), "dayRange")
Me.Range("A1", "A2").AutoFill(dayRange.InnerObject, Excel.XlAutoFillType.xlFillDays)
this.Range["A1", missing].Value2 = "Monday";
this.Range["A2", missing].Value2 = "Tuesday";
Microsoft.Office.Tools.Excel.NamedRange dayRange
= this.Controls.AddNamedRange(this.Range["A1", "A7"], "dayRange");
this.Range["A1", "A2"].AutoFill(dayRange.InnerObject, Excel.XlAutoFillType.xlFillDays);
Office のネイティブなメソッドとプロパティの戻り値の型
ホスト項目のほとんどのメソッドとプロパティは、ホスト項目が基づいているネイティブな Office オブジェクトを返します。たとえば、Excel の NamedRange ホスト コントロールの Parent プロパティは、Microsoft.Office.Tools.Excel.Worksheet ホスト項目ではなく Microsoft.Office.Interop.Excel.Worksheet オブジェクトを返します。同様に、Word の RichTextContentControl ホスト コントロールの Parent プロパティは、Microsoft.Office.Tools.Word.Document ホスト項目ではなく Microsoft.Office.Interop.Word.Document オブジェクトを返します。
ホスト コントロールのコレクションへのアクセス
Visual Studio Tools for Office では、ホスト コントロールの種類ごとに個別のコレクションは用意されていません。たとえば、Microsoft.Office.Interop.Word.Bookmarks コレクションを使用してドキュメント内の各 Microsoft.Office.Tools.Word.Bookmark コントロールを列挙することはできません。Microsoft.Office.Interop.Word.Bookmarks コレクションには、ドキュメントのすべてのブックマークが含まれます。Microsoft.Office.Tools.Word.Bookmark コントロールと Microsoft.Office.Interop.Word.Bookmark は区別されません。
Worksheet.Controls プロパティまたは Document.Controls プロパティを使用して、文書またはワークシート内のすべてのコントロール (ホスト コントロールと Windows フォーム コントロールの両方) を反復処理し、特定の型のホスト コントロールに一致する項目を検索できます。Word 文書上の各コントロールを調べ、対象のコントロールが Microsoft.Office.Tools.Word.Bookmark かどうかを確認するコード例を次に示します。
Dim targetControl As Object
For Each targetControl In Me.Controls
If TypeOf (targetControl) Is Microsoft.Office.Tools.Word.Bookmark Then
Dim bookMark As Microsoft.Office.Tools.Word.Bookmark = _
CType(targetControl, Microsoft.Office.Tools.Word.Bookmark)
' Do some work with the book mark here.
End If
Next
foreach (object targetControl in this.Controls)
{
Microsoft.Office.Tools.Word.Bookmark bookMark =
targetControl as Microsoft.Office.Tools.Word.Bookmark;
if (bookMark != null)
{
// Do some work with the book mark here.
}
}
参照
概念
参照
その他の技術情報
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2008 年 7 月 |
アプリケーション レベルのアドインを使用したホスト項目の作成に関する情報を追加 |
SP1 機能変更 |