ホスト項目およびホスト コントロールのプログラム上の制限事項
ホスト項目やホスト コントロールはそれぞれ、対応するネイティブな Microsoft Office Word オブジェクトや Microsoft Office Excel オブジェクトと同様に動作するように設計され、さらに追加の機能が備えられています。ただし、ホスト項目やホスト コントロールと、ネイティブな Office オブジェクトの実行時の動作には、基本的な相違点があります。
ホスト項目とホスト コントロールの概要については、「ホスト項目とホスト コントロールの概要」を参照してください。
対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトおよびアプリケーション レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
プログラムによるホスト項目の作成
Word または Excel オブジェクト モデルを使用することにより、文書、ブック、またはワークシートをプログラムで実行時に作成したり、開いたりする場合、項目はホスト項目ではありません。その新しいオブジェクトは、ネイティブな Office オブジェクトです。たとえば、Documents.Add メソッドを使用して実行時に新しい Word 文書を作成すると、それは Microsoft.Office.Tools.Word.Document ホスト項目ではなく、ネイティブな Microsoft.Office.Interop.Word.Document オブジェクトになります。同様に、Worksheets.Add メソッドを使用して実行時に新しいワークシートを作成すると、Microsoft.Office.Tools.Excel.Worksheet ホスト項目ではなく、ネイティブな Microsoft.Office.Interop.Excel.Worksheet オブジェクトが作成されます。
ドキュメント レベルのプロジェクトでは、実行時にホスト項目を作成することはできません。ドキュメント レベルのプロジェクトでのホスト項目の作成は、デザイン時にのみ行うことができます。詳細については、「Document ホスト項目」、「Workbook ホスト項目」、および「Worksheet ホスト項目」を参照してください。
アプリケーション レベルのプロジェクトでは、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で、メソッドまたはプロパティが、基になるExcelオブジェクトを要求する場合、メソッドまたはプロパティにホスト コントロールを渡すには、ホスト コントロールの InnerObject のプロパティを使用する必要があります。
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"].Value2 = "Monday";
this.Range["A2"].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 Runtime では、ホスト コントロールの種類ごとに個別のコレクションは用意されていません。代わりに、ホスト項目の 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 bookmark here.
}
}
ホスト項目の Controls プロパティの詳細については、「実行時の Office ドキュメントへのコントロールの追加」を参照してください。
Word および Excel オブジェクト モデルには、文書およびワークシートのネイティブ コントロールのコレクションを公開するプロパティが含まれています。これらのプロパティを使用してマネージ コントロールにアクセスすることはできません。たとえば、Microsoft.Office.Interop.Word.Document の Bookmarks プロパティまたは Microsoft.Office.Tools.Word.Document の Bookmarks プロパティを使用して、文書内の各 Microsoft.Office.Tools.Word.Bookmark ホスト コントロールを列挙することはできません。これらのプロパティには、文書内の Microsoft.Office.Interop.Word.Bookmark コントロールのみが含まれています。つまり、文書内の Microsoft.Office.Tools.Word.Bookmark ホスト コントロールは含まれていません。