다음을 통해 공유


호스트 항목 및 호스트 컨트롤의 프로그래밍에 대한 제한 사항

각 호스트 항목 및 호스트 컨트롤은 해당하는 네이티브 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 개체가 만들어집니다.

문서 수준 프로젝트에서는 런타임에 호스트 항목을 만들 수 없습니다. 문서 수준 프로젝트에서는 디자인 타임에만 호스트 항목을 만들 수 있습니다. 자세한 내용은 문서 호스트 항목, 통합 문서 호스트 항목워크시트 호스트 항목을 참조하십시오.

응용 프로그램 수준 프로젝트에서는 런타임에 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, XMLNodeXMLNodes 호스트 컨트롤은 워크시트 또는 문서에 프로그래밍 방식으로 추가할 수 없습니다.

호스트 항목, 호스트 컨트롤 및 네이티브 Office 개체 간의 형식 차이점 이해

각 호스트 항목과 호스트 컨트롤에는 내부 네이티브 Microsoft Office Word 또는 Microsoft Office Excel 개체가 있습니다. 호스트 항목이나 호스트 컨트롤의 InnerObject 속성을 사용하여 내부 개체에 액세스할 수 있습니다. 그러나 네이티브 Office 개체를 상응하는 호스트 항목이나 호스트 컨트롤로 캐스팅할 수는 없습니다. 네이티브 Office 개체를 호스트 항목이나 호스트 컨트롤의 형식으로 캐스팅하려고 하면 InvalidCastException이 throw됩니다.

일부 경우에는 호스트 항목 및 호스트 컨트롤 형식과 내부 네이티브 Office 개체 사이의 차이점이 코드에 영향을 줄 수 있습니다.

메서드 및 속성에 호스트 컨트롤 전달

Word의 경우 네이티브 Word 개체를 매개 변수로 사용해야 하는 메서드 또는 속성에 호스트 컨트롤을 전달할 수 없습니다. 호스트 컨트롤의 InnerObject 속성을 사용하여 내부 네이티브 Word 개체를 반환해야 합니다. 예를 들어, Microsoft.Office.Tools.Word.Bookmark 호스트 컨트롤의 InnerObject 속성을 메서드로 전달하여 Microsoft.Office.Interop.Word.Bookmark 개체를 해당 메서드로 전달할 수 있습니다.

Excel에서 호스트 컨트롤의 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 개체를 반환합니다.

호스트 컨트롤의 컬렉션 액세스

Microsoft Visual Studio Tools for Office Runtime에서는 각 형식의 호스트 컨트롤에 대한 개별 컬렉션을 제공하지 않습니다. 대신, 호스트 항목의 Controls 속성을 사용하여 문서 또는 워크시트의 모든 관리되는 컨트롤(호스트 컨트롤 및 Windows Forms 컨트롤)을 반복한 다음 필요한 호스트 컨트롤의 형식과 일치하는 항목을 찾을 수 있습니다. 다음 코드 예제에서는 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 자동화

워크시트 호스트 항목

통합 문서 호스트 항목

문서 호스트 항목