다음을 통해 공유


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

문서 수준 사용자 지정을 사용하여 Microsoft Office Word 또는 Microsoft Office Excel을 확장하는 경우 다음 작업을 수행할 수 있습니다.

  • 개체 모델을 사용하여 애플리케이션을 자동화합니다.

  • 문서 화면에 컨트롤을 추가합니다.

  • 사용자 지정 어셈블리에서 문서에서 VBA(Visual Basic for Applications) 코드를 호출합니다.

  • VBA에서 사용자 지정 어셈블리의 코드를 호출합니다.

  • Microsoft Office가 설치되지 않은 서버에 있는 동안 문서의 특정 측면을 관리합니다.

  • 애플리케이션의 UI(사용자 인터페이스)를 사용자 지정합니다.

    적용 대상: 이 항목의 정보는 Excel 및 Word용 문서 수준 프로젝트에 적용됩니다. 자세한 내용은 Office 응용 프로그램 및 프로젝트 유형에서 사용할 수 있는 기능을 참조하세요.

    문서 수준 프로젝트에서 코드를 작성하는 일부 측면은 Visual Studio의 다른 프로젝트 유형과 다릅니다. 이러한 차이의 대부분은 Office 개체 모델이 관리 코드에 노출되는 방식으로 인해 발생합니다. 자세한 내용은 Office 솔루션의 코드 작성을 참조하세요.

    Visual Studio에서 Office 개발 도구를 사용하여 만들 수 있는 문서 수준 사용자 지정 및 기타 유형의 솔루션에 대한 일반적인 내용은 VSTO(Office 솔루션 개발 개요)를 참조하세요.

문서 수준 프로젝트에서 생성된 클래스 사용

문서 수준 프로젝트를 만들 때 Visual Studio는 코드 작성을 시작하는 데 사용할 수 있는 클래스를 프로젝트에 자동으로 생성합니다. Visual Studio는 Word 및 Excel에 대해 다른 클래스를 생성합니다.

  • Word의 문서 수준 프로젝트에서 클래스는 기본적으로 호출 ThisDocument 됩니다.

  • Excel용 문서 수준 프로젝트에는 통합 문서 자체에 대해 하나씩, 워크시트마다 하나씩 생성된 여러 클래스가 있습니다. 기본적으로 이러한 클래스의 이름은 다음과 같습니다.

    • ThisWorkbook

    • Sheet1

    • Sheet2

    • Sheet3

    생성된 클래스에는 문서를 열거나 닫을 때 호출되는 이벤트 처리기가 포함됩니다. 문서를 열 때 코드를 실행하려면 이벤트 처리기에 Startup 코드를 추가합니다. 문서를 닫기 직전에 코드를 실행하려면 이벤트 처리기에 Shutdown 코드를 추가합니다. 자세한 내용은 Office 프로젝트의 이벤트를 참조하세요.

생성된 클래스의 디자인 이해

.NET Framework 4 또는 .NET Framework 4.5를 대상으로 하는 프로젝트에서 Visual Studio Tools for Office 런타임의 호스트 항목 형식은 인터페이스이므로 생성된 클래스는 해당 클래스에서 구현을 파생시킬 수 없습니다. 대신 생성된 클래스는 다음 기본 클래스에서 대부분의 멤버를 파생합니다.

  • ThisDocument: 에서 파생됩니다 DocumentBase.

  • ThisWorkbook: 에서 파생됩니다 WorkbookBase.

  • Sheet n: WorksheetBase에서 비롯됩니다.

    이러한 기본 클래스는 멤버에 대한 모든 호출을 Visual Studio Tools for Office 런타임의 해당 호스트 항목 인터페이스의 내부 구현으로 리디렉션합니다. 예를 들어 Protect 클래스의 메서드를 호출하면 ThisDocument 클래스가 이 호출을 Visual Studio Tools for Office 런타임의 DocumentBase 인터페이스 내부 구현으로 Document 리디렉션합니다.

호스트 애플리케이션의 개체 모델에 액세스

호스트 애플리케이션의 개체 모델에 액세스하려면 프로젝트에서 생성된 클래스의 멤버를 사용합니다. 이러한 각 클래스는 Excel 또는 Word의 개체 모델에 있는 개체에 해당하며 대부분의 동일한 속성, 메서드 및 이벤트를 포함합니다. 예를 들어 ThisDocument Word용 문서 수준 프로젝트의 클래스는 Word 개체 모델의 개체와 Document 동일한 멤버 대부분을 제공합니다.

다음 코드 예제에서는 Word 개체 모델을 사용하여 Word에 대한 문서 수준 사용자 지정의 일부인 문서를 저장하는 방법을 보여줍니다. 이 예제는 클래스에서 ThisDocument 실행하기 위한 것입니다.

this.Save();

외부에서 동일한 작업을 수행하려면 Globals 객체를 사용하여 ThisDocument 클래스에 액세스하세요. 예를 들어 작업 창 UI에 저장 단추를 포함하려는 경우 작업 창 코드 파일에 이 코드를 추가할 수 있습니다.

Globals.ThisDocument.Save();

클래스는 ThisDocument 호스트 항목 Document 에서 Save 대부분의 멤버를 가져오기 때문에 이 코드에서 호출되는 메서드는 실제로 Save 호스트 항목의 Document 메서드입니다. 이 메서드는 Word 개체 모델의 Save 메서드에 해당합니다.

Word 및 Excel의 개체 모델 사용에 대한 자세한 내용은 Word 개체 모델 개요Excel 개체 모델 개요를 참조하세요.

개체에 Globals 대한 자세한 내용은 Office 프로젝트의 개체에 대한 전역 액세스를 참조하세요.

문서에 컨트롤 추가

문서의 UI를 사용자 지정하려면 문서 화면에 Windows Forms 컨트롤 또는 호스트 컨트롤을 추가할 수 있습니다. 다양한 컨트롤 집합을 결합하고 코드를 작성하면 컨트롤을 데이터에 바인딩하고, 사용자로부터 정보를 수집하고, 사용자 작업에 응답할 수 있습니다.

호스트 컨트롤은 Word 및 Excel 개체 모델의 일부 개체를 확장하는 클래스입니다. 예를 들어, ListObject 호스트 컨트롤은 Excel에서 ListObject의 모든 기능을 제공합니다. 그러나 호스트 컨트롤에는 ListObject 추가 이벤트 및 데이터 바인딩 기능도 있습니다.

자세한 내용은 호스트 항목 및 호스트 컨트롤 개요Office 문서 개요의 Windows Forms 컨트롤을 참조하세요.

VBA 및 문서 수준 사용자 지정 결합

문서 수준 사용자 지정의 일부인 문서에서 VBA 코드를 사용할 수 있습니다. 사용자 지정 어셈블리에서 문서의 VBA 코드를 호출할 수 있으며, 문서의 VBA 코드가 사용자 지정 어셈블리의 코드를 호출할 수 있도록 프로젝트를 구성할 수도 있습니다.

자세한 내용은 VBA 및 문서 수준 사용자 지정 결합을 참조하세요.

서버에서 문서 관리

Microsoft Office Word 또는 Microsoft Office Excel이 설치되지 않은 서버에서 문서 수준 사용자 지정의 여러 가지 측면을 관리할 수 있습니다. 예를 들어 문서의 데이터 캐시에서 데이터에 액세스하고 수정할 수 있습니다. 문서와 연결된 사용자 지정 어셈블리를 관리할 수도 있습니다. 예를 들어 문서에서 더 이상 코드를 실행하지 않도록 문서에서 어셈블리를 프로그래밍 방식으로 제거하거나 프로그래밍 방식으로 어셈블리를 문서에 첨부할 수 있습니다.

자세한 내용은 ServerDocument 클래스를 사용하여 서버의 문서 관리를 참조하세요.

Microsoft Office 애플리케이션의 사용자 인터페이스 사용자 지정

문서 수준 사용자 지정을 사용하여 다음과 같은 방법으로 Word 및 Excel의 UI를 사용자 지정할 수 있습니다.

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

Office 이벤트에 대한 많은 이벤트 처리기는 이벤트를 발생시킨 통합 문서, 워크시트 또는 문서를 나타내는 네이티브 Office 개체를 받습니다. 경우에 따라 문서 수준 사용자 지정의 통합 문서나 문서가 이벤트를 발생시켰을 때만 일부 코드를 실행할 수 있습니다. 예를 들어 Excel에 대한 문서 수준 사용자 지정에서는 사용자가 사용자 지정된 통합 문서의 워크시트 중 하나를 활성화할 때 일부 코드를 실행할 수 있지만 동시에 열려 있는 다른 통합 문서에서 워크시트를 활성화할 때는 실행하지 않을 수 있습니다.

네이티브 Office 개체가 있는 경우 해당 개체가 문서 수준 사용자 지정에서 호스트 항목 또는 호스트 컨트롤 로 확장되었는지 여부를 테스트할 수 있습니다. 호스트 항목 및 호스트 컨트롤은 Word 또는 Excel 개체 모델( 네이티브 Office 개체라고 함)에 기본적으로 존재하는 개체에 기능을 추가하는 Visual Studio Tools for Office 런타임에서 제공하는 형식입니다. 전체적으로 호스트 항목 및 호스트 컨트롤을 확장 개체라고도 합니다. 호스트 항목 및 호스트 컨트롤에 대한 자세한 내용은 호스트 항목 및 호스트 컨트롤 개요를 참조하세요.

GetVstoObject 및 HasVstoObject 메서드 이해

네이티브 Office 개체를 테스트하려면 프로젝트에서 HasVstoObjectGetVstoObject 메서드를 사용합니다.

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

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

    문서 수준 프로젝트에서는 메서드를 사용하여 런타임에 GetVstoObjectWorkbookWorksheetDocument 또는 호스트 항목을 만들 수 없습니다. 이 메서드는 디자인 타임에 프로젝트에서 생성된 기존 호스트 항목에만 액세스할 수 있습니다. 런타임에 새 호스트 항목을 만들려면 VSTO 추가 기능 프로젝트를 개발해야 합니다. 자세한 내용은 호스트 항목 및 호스트 컨트롤의 프로그래밍 방식 제한런타임에서 VSTO 추가 기능을 사용한 Word 문서 및 Excel 통합 문서 확장을 참조하세요.

GetVstoObject 및 HasVstoObject 메서드 사용

메서드 HasVstoObjectGetVstoObject를 호출하려면, Globals.Factory.GetVstoObject 메서드 또는 Globals.Factory.HasVstoObject 메서드를 사용하여 테스트하려는 네이티브 Word 또는 Excel 개체(예를 들어, Document 또는 Worksheet)를 전달합니다.