ホスト項目およびホスト コントロールのプログラム上の制限事項

ホスト項目やホスト コントロールはそれぞれ、対応するネイティブな Microsoft Office Word オブジェクトや Microsoft Office Excel オブジェクトと同様に動作するように設計され、さらに追加の機能が備えられています。 ただし、ホスト項目やホスト コントロールと、ネイティブな Office オブジェクトの実行時の動作には、基本的な相違点があります。

ホスト項目とホスト コントロールの概要については、「ホスト項目とホスト コントロールの概要」を参照してください。

対象: このトピックの情報は、Excel 2007 と Excel 2010、および Word 2007 と 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.DocumentMicrosoft.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.DocumentMicrosoft.Office.Interop.Excel.Worksheet に追加することはできません。

注意

XmlMappedRangeXMLNode、および 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 では、次の 2 つの場合に、ホスト コントロールの InnerObject プロパティを使用してホスト コントロールをメソッドまたはプロパティに渡す必要があります。

  • メソッドまたはプロパティが、基になる Excel オブジェクトの受け取りを予期している場合。

  • .NET Framework 3.5 を対象とするプロジェクトで Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute が false に設定されており、メソッドまたはプロパティが、基になる Excel オブジェクトではなく Object の受け取りを予期している場合。 Microsoft.Office.Tools.Excel.ExcelLocale1033Attribute の詳細については、「さまざまな地域設定を使用した Excel のデータの書式設定」を参照してください。

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 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.DocumentBookmarks プロパティまたは Microsoft.Office.Tools.Word.DocumentBookmarks プロパティを使用して、文書内の各 Microsoft.Office.Tools.Word.Bookmark ホスト コントロールを列挙することはできません。 これらのプロパティには、文書内の Microsoft.Office.Interop.Word.Bookmark コントロールのみが含まれています。つまり、文書内の Microsoft.Office.Tools.Word.Bookmark ホスト コントロールは含まれていません。

.NET Framework 3.5 を対象とするプロジェクトでの新しい Excel 2010 および Word 2010 メンバーへのアクセス

.NET Framework 3.5 を対象とする Excel 2010 および Word 2010 プロジェクトでは、Office 2010 で導入されたメンバーをホスト項目およびホスト コントロールで使用できません。 これらのプロジェクトでは、ホスト項目およびホスト コントロールには 2007 Microsoft Office system で使用可能だったメンバーのみが含まれています。 Excel 2010 または Word 2010 で追加されたメンバーにアクセスするには、ホスト コントロールの InnerObject プロパティを使用して基になるネイティブ オブジェクトを返し、そのオブジェクトのメンバーにアクセスします。

たとえば、Word 2010 では、Microsoft.Office.Interop.Word.ContentControl オブジェクトに、チェック ボックス コンテンツ コントロールが選択されているかどうかの判別に使用できる Checked プロパティがあります (Word 2007 にはチェック ボックス コンテンツ コントロールがないため、このプロパティは Word 2007 では使用できません)。 .NET Framework 3.5 を対象とする Word 2010 プロジェクトでは、Microsoft.Office.Tools.Word.ContentControl ホスト コントロールに Checked プロパティはありません。 InnerObject プロパティを使用して、基になる Microsoft.Office.Interop.Word.ContentControl オブジェクトの Checked プロパティにアクセスする方法を次のコード例に示します。

Me.Paragraphs(1).Range.InsertParagraphBefore()
Me.Paragraphs(1).Range.Select()
Dim checkBoxControl1 As Microsoft.Office.Tools.Word.ContentControl =
    Me.Controls.AddContentControl("checkBoxControl1", Word.WdContentControlType.wdContentControlCheckBox)

' The following line of code compiles in projects that target the .NET Framework 4, but it does not compile 
' in projects that target the .NET Framework 3.5.
checkBoxControl1.Checked = True

' In projects that target the .NET Framework 3.5, use the following code.
checkBoxControl1.InnerObject.Checked = True
this.Paragraphs[1].Range.InsertParagraphBefore();
this.Paragraphs[1].Range.Select();
Microsoft.Office.Tools.Word.ContentControl checkBoxControl1 = 
    this.Controls.AddContentControl("checkBoxControl1", Word.WdContentControlType.wdContentControlCheckBox);

// The following line of code compiles in projects that target the .NET Framework 4, but it does not compile 
// in projects that target the .NET Framework 3.5.
checkBoxControl1.Checked = true;

// In projects that target the .NET Framework 3.5, use the following code.
checkBoxControl1.InnerObject.Checked = true;

参照

参照

Worksheet.Controls

Document.Controls

概念

ホスト項目とホスト コントロールの概要

拡張オブジェクトによる Word の自動化

拡張オブジェクトによる Excel の自動化

Worksheet ホスト項目

Workbook ホスト項目

Document ホスト項目