다음을 통해 공유


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

업데이트: 2008년 7월

적용 대상

이 항목의 정보는 지정된 Visual Studio Tools for Office 프로젝트 및 Microsoft Office 버전에만 적용됩니다.

문서 수준 프로젝트

  • Excel 2003

  • Excel 2007

  • Word 2003

  • Word 2007

응용 프로그램 수준 프로젝트

  • Excel 2007

  • Word 2007

자세한 내용은 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

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

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

Visual Studio 2008 SP1(서비스 팩 1)부터는 런타임에 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, 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 개체를 예상하는 경우

  • 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 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 book mark here.
    }
}

참고 항목

개념

호스트 항목 및 호스트 컨트롤 개요

워크시트 호스트 항목

통합 문서 호스트 항목

문서 호스트 항목

참조

Worksheet.Controls

Document.Controls

기타 리소스

Word 호스트 컨트롤

Excel 호스트 컨트롤

변경 기록

날짜

변경 내용

이유

2008년 7월

응용 프로그램 수준 추가 기능을 사용하여 호스트 항목을 만드는 방법에 대한 정보가 추가되었습니다.

SP1 기능 변경