다음을 통해 공유


문서 수준 사용자 지정의 네이티브 Office 개체에서 확장 개체 가져오기

업데이트: 2008년 7월

적용 대상

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

프로젝트 형식

  • 문서 수준 프로젝트

Microsoft Office 버전

  • Excel 2007

  • Word 2007

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

Office 이벤트에 대한 대부분의 이벤트 처리기에서는 이벤트가 발생한 통합 문서, 워크시트 또는 문서를 나타내는 네이티브 Office 개체를 받습니다. 때로는 문서 수준 사용자 지정의 통합 문서 또는 문서에서 이벤트가 발생한 경우에만 코드를 실행하려는 경우도 있습니다. 예를 들어 Excel용 문서 수준 사용자 지정에서 사용자가 사용자 지정의 Microsoft.Office.Tools.Excel.Worksheet 호스트 항목 중 하나를 활성화할 때만 코드를 실행하고 사용자가 동시에 열려 있는 다른 통합 문서의 워크시트를 활성화할 때는 코드를 실행하지 않을 수 있습니다.

Visual Studio 2008 SP1(서비스 팩 1)부터는 네이티브 Office 개체를 가져올 때 해당 개체가 문서 수준 사용자 지정의 호스트 항목으로 확장되었는지 Microsoft.Office.Tools.Excel.ListObject 호스트 컨트롤로 확장되었는지를 테스트할 수 있습니다.

호스트 항목과 호스트 컨트롤은 Word 또는 Excel 개체 모델에 기본적으로 포함된 개체(네이티브 Office 개체)에 기능을 추가하는 Visual Studio Tools for Office 개체입니다. 호스트 항목과 호스트 컨트롤을 통틀어 확장 개체라고도 합니다. 호스트 항목과 호스트 컨트롤에 대한 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.

GetVstoObject 및 HasVstoObject 메서드 사용

네이티브 Office 개체를 테스트하려면 다음 네이티브 Office 개체 중 하나의 인스턴스에 대한 HasVstoObject 및 GetVstoObject 메서드를 사용합니다.

네이티브 Office 개체에 사용자 지정의 확장 개체가 있는지 여부만 확인하려면 HasVstoObject 메서드를 사용합니다. 이 메서드는 네이티브 Office 개체에 확장 개체가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

확장 개체를 가져오려면 GetVstoObject 메서드를 사용합니다. 이 메서드는 네이티브 Office 개체에 Microsoft.Office.Tools.Excel.ListObject, Microsoft.Office.Tools.Excel.Workbook, Microsoft.Office.Tools.Excel.Worksheet 또는 Microsoft.Office.Tools.Word.Document 개체가 있으면 해당 개체를 반환합니다. 그렇지 않으면 GetVstoObject는 null를 반환합니다. 예를 들어 Microsoft.Office.Interop.Word.Document가 Word 문서 프로젝트의 문서에 대한 기본 개체인 경우 Microsoft.Office.Interop.Word.Document 개체의 GetVstoObject 메서드는 Microsoft.Office.Tools.Word.Document를 반환합니다.

런타임에 문서 수준 솔루션에서 GetVstoObject를 사용하여 새 호스트 항목을 만들 수는 없습니다. 이 메서드는 디자인 타임에 프로젝트에 생성된 기존 호스트 항목에 액세스하려는 경우에만 사용할 수 있습니다. 자세한 내용은 호스트 항목 및 호스트 컨트롤의 프로그래밍에 대한 제한 사항을 참조하십시오.

응용 프로그램 수준 프로젝트에서는 런타임에 GetVstoObject 메서드를 사용하여 새 호스트 항목을 생성할 수 있습니다. 자세한 내용은 런타임에 응용 프로그램 수준 추가 기능의 Word 문서 및 Excel 통합 문서 확장을 참조하십시오.

참고:

GetVstoObject 및 HasVstoObject 메서드를 사용하려면 코드 파일의 맨 위에 Microsoft.Office.Tools.Excel.Extensions 또는 Microsoft.Office.Tools.Word.Extensions 네임스페이스에 대한 using(C#의 경우) 또는 Imports(Visual Basic의 경우) 문을 추가해야 합니다. GetVstoObject 및 HasVstoObject 메서드는 Visual Studio Tools for Office 런타임에서 확장 메서드로 구현되며 이러한 문은 해당 메서드를 호출할 수 있게 해 줍니다.

호스트 항목에서 이벤트가 발생했는지 확인

다음 코드 예제에서는 HasVstoObject 및 GetVstoObject 메서드를 보여 줍니다. 두 예제 모두 Excel 통합 문서 프로젝트에서 ThisWorkbook 클래스의 SheetActivate 이벤트를 처리합니다.

첫 번째 예제에서는 각 기본 호스트 항목의 InnerObject 속성과 Sh 매개 변수를 비교하여 Microsoft.Office.Tools.Excel.Worksheet 호스트 항목 중 하나가 활성화되었는지 여부를 확인합니다.

Sub ThisWorkbook_SheetActivate1(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing

    If Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet1
    ElseIf Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet2
    ElseIf Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh) Then
        vstoWorksheet = Globals.Sheet3
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate1(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;

    if (Type.ReferenceEquals(Globals.Sheet1.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet1;
    else if (Type.ReferenceEquals(Globals.Sheet2.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet2;
    else if (Type.ReferenceEquals(Globals.Sheet3.InnerObject, Sh))
        vstoWorksheet = Globals.Sheet3;

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

다음 예제에서는 Sh 매개 변수의 HasVstoObject 및 GetVstoObject 메서드를 사용하여 이 과정을 간단하게 합니다.

Sub ThisWorkbook_SheetActivate2(ByVal Sh As Object) Handles Me.SheetActivate
    Dim vstoWorksheet As Microsoft.Office.Tools.Excel.Worksheet = Nothing
    Dim interopWorksheet As Microsoft.Office.Interop.Excel.Worksheet = _
        CType(Sh, Microsoft.Office.Interop.Excel.Worksheet)

    If interopWorksheet IsNot Nothing AndAlso _
        interopWorksheet.HasVstoObject() Then
        vstoWorksheet = interopWorksheet.GetVstoObject()
    End If

    If vstoWorksheet IsNot Nothing Then
        ' Do something with the VSTO worksheet here.
    End If
End Sub
void ThisWorkbook_SheetActivate2(object Sh)
{
    Microsoft.Office.Tools.Excel.Worksheet vstoWorksheet = null;
    Microsoft.Office.Interop.Excel.Worksheet interopWorksheet = 
        Sh as Microsoft.Office.Interop.Excel.Worksheet;

    if (interopWorksheet != null && interopWorksheet.HasVstoObject())
    {
        vstoWorksheet = interopWorksheet.GetVstoObject();
    }

    if (vstoWorksheet != null)
    {
        // Do something with the VSTO worksheet here.
    }
}

참고 항목

개념

문서 수준 사용자 지정 프로그래밍

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

런타임에 응용 프로그램 수준 추가 기능의 Word 문서 및 Excel 통합 문서 확장

확장 메서드(Visual Basic)

참조

확장 메서드(C# 프로그래밍 가이드)

변경 기록

날짜

변경 내용

이유

2008년 7월

항목이 추가되었습니다.

SP1 기능 변경