다음을 통해 공유


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

다음과 같이 응용 프로그램 수준 추가 기능을 사용하여 Word 문서와 Excel 통합 문서를 사용자 지정할 수 있습니다.

  • 열려 있는 문서 또는 워크시트에 관리되는 컨트롤을 추가합니다.

  • 이벤트를 노출하며 Windows Forms 데이터 바인딩 모델을 사용하여 데이터에 바인딩할 수 있는 확장된 ListObject로 Excel 워크시트의 기존 목록 개체를 변환합니다.

  • 특정 문서, 통합 문서 및 워크시트에 대해 Word 및 Excel에서 노출하는 응용 프로그램 수준 이벤트에 액세스합니다.

이 기능을 사용하려면 런타임에 문서 또는 통합 문서를 확장하는 개체를 생성합니다.

적용: 이 항목에서는 다음 응용 프로그램에 대해 응용 프로그램 수준 프로젝트에 적용 됩니다: Excel 2010. Word 2010입니다.자세한 내용은 Office 응용 프로그램 및 프로젝트 형식에 따라 사용 가능한 기능을 참조하십시오.

추가 기능에서 확장 개체 생성

확장 개체 형식의 인스턴스 기능을 기본적으로 Word 또는 Excel 개체 모델에서 개체를 추가 하는 Office 런타임 Visual Studio 도구에서 제공 됩니다 (라는 네이티브 Office 개체).Word 또는 Excel 개체의 확장 개체를 생성하려면 GetVstoObject 메서드를 사용합니다.처음 전화를 GetVstoObject 메서드는 지정 된 Word 또는 Excel에 대 한 개체를 지정 된 개체를 확장 하는 새 개체를 반환 합니다. 메서드를 호출 하 고 동일한 Word 또는 Excel을 지정할 때마다 개체 같은 확장된 개체를 반환 합니다.

확장 개체의 형식은 네이티브 Office 개체의 형식과 이름은 동일하지만 Microsoft.Office.Tools.Excel 또는 Microsoft.Office.Tools.Word 네임스페이스에 정의되어 있습니다.예를 들어 GetVstoObject 메서드를 호출하여 Microsoft.Office.Interop.Word.Document 개체를 확장하면 해당 메서드에서 Microsoft.Office.Tools.Word.Document 개체를 반환합니다.

GetVstoObject 메서드는 주로 응용 프로그램 수준 프로젝트에서 사용합니다.문서 수준 프로젝트에서도 이 메서드를 사용할 수 있지만 이 경우 동작이 달라지며 사용 빈도도 보다 적습니다.

특정 네이티브 Office 개체에 대해 확장 개체가 이미 생성되었는지 여부를 확인하려면 HasVstoObject 메서드를 사용합니다.자세한 내용은 Office 개체의 확장 여부 확인을 참조하십시오.

Cc442981.collapse_all(ko-kr,VS.110).gif호스트 항목 생성

Microsoft.Office.Interop.Excel.Workbook, Microsoft.Office.Interop.Excel.Worksheet 또는 Microsoft.Office.Interop.Word.Document와 같은 문서 수준 개체를 확장하기 위해 GetVstoObject를 사용하는 경우 반환된 개체를 호스트 항목이라고 합니다.호스트 항목은 다른 확장 개체 및 컨트롤을 비롯하여 다른 개체를 포함할 수 있는 형식입니다.호스트 항목은 Word 또는 Excel 주 interop 어셈블리의 해당하는 형식과 비슷하지만 추가 기능이 있습니다.호스트 항목에 대한 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.

호스트 항목을 생성 한 후에 문서, 통합 문서 또는 워크시트에 관리 되는 컨트롤을 추가 하려면 사용할 수 있습니다.자세한 내용은 문서 및 워크시트에 관리 되는 컨트롤 추가.

Word 문서에 대한 호스트 항목을 생성하려면

  • 다음 코드 예제에서는 현재 문서에 대 한 호스트 항목을 생성 하는 방법을 보여 줍니다.

    If Globals.ThisAddIn.Application.Documents.Count > 0 Then
        Dim NativeDocument As Microsoft.Office.Interop.Word.Document = _
            Globals.ThisAddIn.Application.ActiveDocument
        Dim VstoDocument As Microsoft.Office.Tools.Word.Document = _
            Globals.Factory.GetVstoObject(NativeDocument)
    End If
    
    if (Globals.ThisAddIn.Application.Documents.Count > 0)
    {
        Microsoft.Office.Interop.Word.Document nativeDocument =
            Globals.ThisAddIn.Application.ActiveDocument;
        Microsoft.Office.Tools.Word.Document vstoDocument =
            Globals.Factory.GetVstoObject(nativeDocument);
    }
    

Excel 통합 문서에 대한 호스트 항목을 생성하려면

  • 다음 코드 예제에서는 현재 통합 문서에 대 한 호스트 항목을 생성 하는 방법을 보여 줍니다.

    Dim NativeWorkbook As Microsoft.Office.Interop.Excel.Workbook =
        Globals.ThisAddIn.Application.ActiveWorkbook
    If NativeWorkbook IsNot Nothing Then
        Dim vstoWorkbook As Microsoft.Office.Tools.Excel.Workbook =
            Globals.Factory.GetVstoObject(NativeWorkbook)
    End If
    
    Microsoft.Office.Interop.Excel.Workbook nativeWorkbook = 
        Globals.ThisAddIn.Application.ActiveWorkbook;
    if (nativeWorkbook != null)
    {
        Microsoft.Office.Tools.Excel.Workbook vstoWorkbook = 
            Globals.Factory.GetVstoObject(nativeWorkbook);
    }
    

Excel 워크시트에 대한 호스트 항목을 생성하려면

  • 다음 코드 예제에서는 현재 워크시트에 대 한 호스트 항목을 프로젝트에서 생성 하는 방법을 보여 줍니다.

    Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet =
        Globals.ThisAddIn.Application.ActiveSheet
    If NativeWorksheet IsNot Nothing Then
        Dim vstoSheet As Microsoft.Office.Tools.Excel.Worksheet =
            Globals.Factory.GetVstoObject(NativeWorksheet)
    End If
    
    Microsoft.Office.Interop.Excel.Worksheet nativeWorksheet =
        Globals.ThisAddIn.Application.ActiveSheet;
    if (nativeWorksheet != null)
    {
        Microsoft.Office.Tools.Excel.Worksheet vstoSheet = 
            Globals.Factory.GetVstoObject(nativeWorksheet);
    }
    

Cc442981.collapse_all(ko-kr,VS.110).gifListObject 호스트 컨트롤 생성

GetVstoObject 메서드를 사용하여 Microsoft.Office.Interop.Excel.ListObject를 확장하면 해당 메서드에서 Microsoft.Office.Tools.Excel.ListObject를 반환합니다.Microsoft.Office.Tools.Excel.ListObject에는 원본 Microsoft.Office.Interop.Excel.ListObject의 모든 기능이 있으며 Windows Forms 데이터 바인딩 모델을 사용하여 데이터에 바인딩할 수 있는 기능과 같은 추가 기능도 있습니다.자세한 내용은 ListObject 컨트롤을 참조하십시오.

ListObject에 대한 호스트 컨트롤을 생성하려면

  • 다음 코드 예제에서는 생성 된 Microsoft.Office.Tools.Excel.ListObject 첫 번째 Microsoft.Office.Interop.Excel.ListObject 프로젝트에서 현재 워크시트에.

    Dim sheet As Microsoft.Office.Interop.Excel.Worksheet =
        Globals.ThisAddIn.Application.ActiveSheet
    If sheet.ListObjects.Count > 0 Then
        Dim listObject As Excel.ListObject = sheet.ListObjects(1)
        Dim vstoListObject As Microsoft.Office.Tools.Excel.ListObject =
            Globals.Factory.GetVstoObject(listObject)
    End If
    
    Microsoft.Office.Interop.Excel.Worksheet sheet =
        Globals.ThisAddIn.Application.ActiveSheet;
    if (sheet.ListObjects.Count > 0)
    {
        Excel.ListObject listObject = 
            sheet.ListObjects[1];
        Microsoft.Office.Tools.Excel.ListObject vstoListObject =
            Globals.Factory.GetVstoObject(listObject);
    }
    

문서 및 워크시트에 관리되는 컨트롤 추가

Microsoft.Office.Tools.Word.Document 또는 Microsoft.Office.Tools.Excel.Worksheet를 생성한 후에는 이러한 확장 개체가 나타내는 문서 또는 워크시트에 컨트롤을 추가할 수 있습니다.이렇게 하려면 Microsoft.Office.Tools.Word.Document 또는 Microsoft.Office.Tools.Excel.WorksheetControls 속성을 사용합니다.자세한 내용은 런타임에 Office 문서에 컨트롤 추가를 참조하십시오.

Windows Forms 컨트롤이나 호스트 컨트롤을 추가할 수 있습니다.호스트 컨트롤은 Microsoft Visual Studio Tools for Office Runtime에서 제공하는 컨트롤로, Word 또는 Excel 주 interop 어셈블리의 해당하는 컨트롤을 래핑합니다.호스트 컨트롤은 기본 네이티브 Office 개체의 모든 동작을 제공하지만 이벤트를 발생시킬 수 있으며 Windows Forms 데이터 바인딩 모델을 사용하여 데이터에 바인딩될 수도 있습니다.자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하십시오.

[!참고]

추가할 수 없습니다는 XmlMappedRange 컨트롤을 워크시트에 또는 XMLNode 또는 XMLNodes 추가 기능을 사용 하 여 문서에 컨트롤입니다.이러한 호스트 컨트롤은 프로그래밍 방식으로 추가할 수 없습니다.자세한 내용은 호스트 항목 및 호스트 컨트롤의 프로그래밍에 대한 제한 사항을 참조하십시오.

Cc442981.collapse_all(ko-kr,VS.110).gif컨트롤 유지 및 제거

문서나 워크시트에 관리되는 컨트롤을 추가할 경우 문서를 저장한 다음 닫을 때는 해당 컨트롤이 유지되지 않습니다.모든 호스트 컨트롤 내부 네이티브 Office 개체만 남아 있는 제거 됩니다.예를 들어 있는 Microsoft.Office.Tools.Excel.ListObject 되는 Microsoft.Office.Interop.Excel.ListObject.Windows Forms 컨트롤도 모두 제거되지만 이 컨트롤의 ActiveX 래퍼는 문서에 남아 있습니다.컨트롤을 정리하거나 다음에 문서가 열릴 때 컨트롤을 다시 만들려면 추가 기능에 코드를 포함해야 합니다.자세한 내용은 Office 문서에서 동적 컨트롤 유지를 참조하십시오.

문서 및 통합 문서의 응용 프로그램 수준 이벤트에 액세스

네이티브 Word 및 Excel 개체 모델의 일부 문서, 통합 문서 및 워크시트 이벤트는 응용 프로그램 수준에서만 발생합니다.예를 들어 DocumentBeforeSave 이벤트는 Word에서 문서가 열릴 때 발생하지만 이 이벤트가 정의된 클래스는 Microsoft.Office.Interop.Word.Document가 아니라 Microsoft.Office.Interop.Word.Application입니다.

추가 기능에서 네이티브 Office 개체만 사용할 경우 이러한 응용 프로그램 수준 이벤트를 처리한 다음 이벤트가 발생한 문서가 사용자 지정한 문서인지 확인하기 위한 추가 코드를 작성해야 합니다.호스트 항목은 특정 문서에 대한 이벤트를 보다 쉽게 처리할 수 있도록 문서 수준에서 이러한 이벤트를 제공합니다.호스트 항목을 생성한 다음 해당 호스트 항목에 대한 이벤트를 처리할 수 있습니다.

Cc442981.collapse_all(ko-kr,VS.110).gif네이티브 Word 개체를 사용하는 예제

다음 코드 예제에서는 Word 문서에 대한 응용 프로그램 수준 이벤트를 처리하는 방법을 보여 줍니다.CreateDocument 메서드는 새 문서를 만든 다음 이 문서를 저장하지 못하게 하는 DocumentBeforeSave 이벤트 처리기를 정의합니다.이 이벤트는 Microsoft.Office.Interop.Word.Application 개체에 대해 발생하는 응용 프로그램 수준 이벤트이므로 이벤트 처리기에서는 Doc 매개 변수를 document1 개체와 비교하여 document1이 저장된 문서를 나타내는지 확인해야 합니다.

Private document1 As Word.Document = Nothing

Private Sub CreateDocument1()
    document1 = Me.Application.Documents.Add()
End Sub

Private Sub Application_DocumentBeforeSave(ByVal Doc As Word.Document, _
    ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) _
    Handles Application.DocumentBeforeSave
    If Type.ReferenceEquals(Doc, document1) Then
        Cancel = True
    End If
End Sub
private Word.Document document1 = null;

private void CreateDocument1()
{
    document1 = this.Application.Documents.Add(ref missing,
        ref missing, ref missing, ref missing);
    this.Application.DocumentBeforeSave += 
        new Word.ApplicationEvents4_DocumentBeforeSaveEventHandler(
        Application_DocumentBeforeSave);
}

private void Application_DocumentBeforeSave(Word.Document Doc, 
    ref bool SaveAsUI, ref bool Cancel)
{
    if (Type.ReferenceEquals(Doc, document1)) 
    {
        Cancel = true;
    }
}

Cc442981.collapse_all(ko-kr,VS.110).gif호스트 항목을 사용하는 예제

다음 코드 예제에서는 Microsoft.Office.Tools.Word.Document 호스트 항목의 BeforeSave 이벤트를 처리하여 이 과정을 간단하게 합니다.이 예제의 CreateDocument2 메서드는 document2 개체를 확장하는 Microsoft.Office.Tools.Word.Document를 생성한 다음 이 문서를 저장하지 못하게 하는 BeforeSave 이벤트 처리기를 정의합니다.이 이벤트 처리기는 document2가 저장될 때만 호출되므로 저장된 문서를 확인하기 위한 추가 작업을 수행하지 않고 저장 작업을 취소할 수 있습니다.

다음 코드 예제에서는이 작업을 보여 줍니다.

Private document2 As Word.Document = Nothing
Private WithEvents vstoDocument As Microsoft.Office.Tools.Word.Document = Nothing

Private Sub CreateDocument2()
    document2 = Me.Application.Documents.Add()
    vstoDocument = Globals.Factory.GetVstoObject(document2)
End Sub

Private Sub vstoDocument_BeforeSave(ByVal sender As Object, _
    ByVal e As SaveEventArgs) Handles vstoDocument.BeforeSave
    e.Cancel = True
End Sub
private Word.Document document2 = null;
private Microsoft.Office.Tools.Word.Document vstoDocument = null;

private void CreateDocument2()
{
    document2 = this.Application.Documents.Add(ref missing,
        ref missing, ref missing, ref missing);
    vstoDocument = Globals.Factory.GetVstoObject(document2);
    vstoDocument.BeforeSave += new SaveEventHandler(vstoDocument_BeforeSave);
}

private void vstoDocument_BeforeSave(object sender, SaveEventArgs e)
{
    e.Cancel = true;
}

Office 개체의 확장 여부 확인

특정 네이티브 Office 개체에 대해 확장 개체가 이미 생성되었는지 여부를 확인하려면 HasVstoObject 메서드를 사용합니다.이 메서드는 확장 개체가 이미 생성되었으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

Globals.Factory.HasVstoMethod 메서드를 사용하십시오.같은 네이티브 Word 또는 Excel 개체에 전달 된 Microsoft.Office.Interop.Word.Document 또는 Microsoft.Office.Interop.Excel.Worksheet, 확장된 개체에 대 한 테스트를.

HasVstoObject 메서드는 지정된 Office 개체에 확장 개체가 있을 때만 코드를 실행하려는 경우에 유용합니다.예를 들어 DocumentBeforeSave 이벤트를 처리하여 문서가 저장되기 전에 문서에서 관리되는 컨트롤을 제거하는 Word 추가 기능이 있을 경우 HasVstoObject 메서드를 사용하여 문서가 확장되었는지 확인할 수 있습니다.문서가 확장되지 않은 경우 해당 문서에는 관리되는 컨트롤이 포함될 수 없으므로 이벤트 처리기는 문서의 컨트롤을 정리하려고 시도하지 않고 반환될 수 있습니다.

참고 항목

개념

런타임에 Office 문서에 컨트롤 추가

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

기타 리소스

응용 프로그램 수준 추가 기능 프로그래밍

Office 개발 샘플 및 연습