Visual C# .NET을 사용한 Office 자동화 서버의 바인딩

기술 자료 번역 기술 자료 번역
기술 자료: 302902 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR302902
모두 확대 | 모두 축소

이 페이지에서

요약

Microsoft Office 응용 프로그램과 같은 응용 프로그램을 자동화하는 경우에는 해당 Office 응용 프로그램 개체의 속성과 메서드에 대한 호출이 해당 개체에 연결되어 있어야 합니다. 속성 및 메서드 호출과 해당 개체를 연결하는 프로세스를 대개 바인딩이라고 합니다. Visual C#에서는 초기 바인딩(early binding)후기 바인딩(late binding)의 두 가지 바인딩 형식을 사용할 수 있습니다. 바인딩 형식은 성능, 유연성, 관리 효율성 등 프로그램의 많은 요소에 영향을 미칠 수 있습니다.

이 문서에서는 Visual C# 자동화 클라이언트의 초기 바인딩과 후기 바인딩을 설명하고 비교하며, 두 가지 바인딩 형식을 모두 보여주는 코드 예제를 제공합니다.

초기 바인딩

초기 바인딩을 사용할 경우 Visual C#에서는 사용할 메서드나 속성에 직접 바인딩하기 위해 해당 Office 응용 프로그램과 관련하여 사용 가능한 형식 정보를 사용합니다. 컴파일러에서 형식 및 구문 검사를 수행하여 올바른 수와 형식의 매개 변수가 메서드나 속성에 전달되고 예상한 형식의 값이 반환되는지 확인할 수 있습니다. 런타임에 속성이나 메서드를 호출하는 데 필요한 작업이 더 적기 때문에 초기 바인딩이 더 빠른 경우가 있습니다. 그러나 초기 바인딩이 더 빠를 수도 있지만 후기 바인딩과 비교할 때 성능 차이는 대개 무시할 수 있을 정도입니다.

초기 바인딩에는 버전 호환성 문제가 발생할 수 있는 단점이 있습니다. 예를 들어, Microsoft Excel 2002와 같은 자동화 서버가 Excel 2000에서는 사용할 수 없는 새로운 메서드나 속성을 도입하거나 기존 속성이나 메서드를 변경할 수 있습니다. 이러한 변경으로 인해 해당 개체의 이진 레이아웃이 변경되고 Excel 2002 형식 정보를 사용하여 Excel 2000을 자동화하는 Visual C# 응용 프로그램에 문제가 발생할 수 있습니다. 초기 바인딩과 관련하여 이러한 문제를 방지하려면 자동화 클라이언트를 개발하고 테스트할 때 지원할 Office 응용 프로그램 중에서 가장 이전 버전에 대한 형식 정보를 사용하는 것이 일반적으로 좋습니다.

다음 단계에서는 초기 바인딩을 사용하는 자동화 클라이언트를 작성하는 방법을 보여 줍니다. 이 단계에서 알 수 있듯이 초기 바인딩에서는 자동화 클라이언트에 대한 형식 라이브러리를 참조해야 합니다.

초기 바인딩을 사용하는 자동화 클라이언트 만들기

  1. Microsoft Visual Studio .NET을 시작합니다. 파일 메뉴에서 새로 만들기를 누른 다음 프로젝트를 누릅니다. Visual C# 프로젝트 형식에서 Windows 응용 프로그램을 선택합니다. 기본적으로 Form1이 만들어집니다.
  2. Microsoft Excel Object Library에 대한 참조를 추가합니다. 이렇게 하려면 다음과 같이 하십시오.
    1. 프로젝트 메뉴에서 참조 추가를 누릅니다.
    2. COM 탭에서 Microsoft Excel Object Library를 찾은 다음 선택을 누릅니다.

      참고 Office 2003에는 PIA(기본 Interop 어셈블리)가 포함되어 있습니다. Office XP에는 PIA가 포함되어 있지 않지만, PIA를 다운로드할 수 있습니다. Office XP PIA에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
      328912 Microsoft Office XP PIA를 다운로드할 수 있다
    3. 참조 추가 대화 상자에서 확인을 눌러 선택한 내용을 적용합니다. 선택한 라이브러리에 대해 래퍼를 생성할 것인지 묻는 메시지가 표시되면 를 누릅니다.
  3. 보기 메뉴에서 도구 상자를 선택하여 도구 상자를 표시한 다음 Form1에 단추를 추가합니다.
  4. Button1을 두 번 누릅니다. 해당 폼에 대한 코드 창이 나타납니다.
  5. 코드 창에서
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    위의 코드를 아래와 같이 바꿉니다.
    private void button1_Click(object sender, System.EventArgs e)
    {
    	Excel.Application objApp;
    	Excel._Workbook objBook;
    	Excel.Workbooks objBooks;
    	Excel.Sheets objSheets;
    	Excel._Worksheet objSheet;
    	Excel.Range range;
    
    	try
    	{
    		// Instantiate Excel and start a new workbook.
    		objApp = new Excel.Application();
    		objBooks = objApp.Workbooks;
    		objBook = objBooks.Add( Missing.Value );
    		objSheets = objBook.Worksheets;
    		objSheet = (Excel._Worksheet)objSheets.get_Item(1);
    
    		range = objSheet.get_Range("A1", Missing.Value);
    
    		range.set_Value(Missing.Value, "Hello, World!" );
    
    		//Return control of Excel to the user.
    		objApp.Visible = true;
    		objApp.UserControl = true;
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }  
    					
  6. 코드 창의 맨 위로 스크롤합니다. using 지시문 목록의 끝에 다음 행을 추가합니다.
    using System.Reflection;
    using Excel = Microsoft.Office.Interop.Excel;
    					

후기 바인딩

후기 바인딩은 초기 바인딩과 반대로 해당 개체에 속성 및 메서드 호출을 바인딩하기 위해 런타임 때까지 기다립니다. 이렇게 하려면 대상 개체가 특수 COM 인터페이스 IDispatch를 구현해야 합니다. IDispatch::GetIDsOfNames 메서드를 사용하면 Visual C#에서 개체를 검사하여 개체에서 지원하는 메서드와 속성을 확인할 수 있고, IDispatch::Invoke 메서드를 사용하면 Visual C#에서 해당 메서드와 속성을 호출할 수 있습니다. 후기 바인딩은 초기 바인딩에 내재된 버전 종속성을 어느 정도 제거하는 장점이 있습니다. 그러나, 메서드 및 속성에 대한 호출을 수정하기 위한 실마리를 제공할 수 있는 Intellisense 기능을 제공하지 않을 뿐만 아니라 자동화 코드의 무결성에 대한 컴파일 타임 검사를 제공하지 않는 단점이 있습니다.

Visual C#에서 후기 바인딩을 사용하려면 System.Type.InvokeMember 메서드를 사용하십시오. 이 메서드는 IDispatch::GetIDsOfNamesIDispatch::Invoke를 호출하여 자동화 서버의 메서드와 속성에 바인딩합니다.

후기 바인딩을 사용하는 자동화 클라이언트 만들기

  1. Microsoft Visual Studio .NET을 시작합니다. 파일 메뉴에서 새로 만들기를 누른 다음 프로젝트를 누릅니다. Visual C# 프로젝트 형식에서 Windows 응용 프로그램을 선택합니다. 기본적으로 Form1이 만들어집니다.
  2. 보기 메뉴에서 도구 상자를 선택하여 도구 상자를 표시한 다음 Form1에 단추를 추가합니다.
  3. Button1을 두 번 누릅니다. 해당 폼에 대한 코드 창이 나타납니다.
  4. 코드 창에서
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    						
    위의 코드를 아래와 같이 바꿉니다.
    private void button1_Click(object sender, System.EventArgs e)
    {
    	object objApp_Late;
    	object objBook_Late;
    	object objBooks_Late;
    	object objSheets_Late;
    	object objSheet_Late;
    	object objRange_Late;
    	object[] Parameters;
    
    	try
    	{
    		// Get the class type and instantiate Excel.
    		Type objClassType; 
    		objClassType = Type.GetTypeFromProgID("Excel.Application"); 
    		objApp_Late = Activator.CreateInstance(objClassType);
    
    		//Get the workbooks collection.
    		objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", 
    		BindingFlags.GetProperty, null, objApp_Late, null );
    
    		//Add a new workbook.
    		objBook_Late = objBooks_Late.GetType().InvokeMember( "Add", 
    			BindingFlags.InvokeMethod, null, objBooks_Late, null );
    
    		//Get the worksheets collection.
    		objSheets_Late = objBook_Late.GetType().InvokeMember( "Worksheets",
    			BindingFlags.GetProperty, null, objBook_Late, null );
    
    		// Get the first worksheet.
    		Parameters = new Object[1];
    		Parameters[0] = 1;
    		objSheet_Late = objSheets_Late.GetType().InvokeMember( "Item", 
    			BindingFlags.GetProperty, null, objSheets_Late, Parameters );
    
    		//Get a range object that contains cell A1.
    		Parameters = new Object[2];
    		Parameters[0] = "A1";
    		Parameters[1] = Missing.Value;
    		objRange_Late = objSheet_Late.GetType().InvokeMember( "Range",
    			BindingFlags.GetProperty, null, objSheet_Late, Parameters );
    
    		//Write "Hello, World!" in cell A1.
    		Parameters = new Object[1];
    		Parameters[0] = "Hello, World!";
    		objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty, 
    			null, objRange_Late, Parameters );
    
    		//Return control of Excel to the user.
    		Parameters = new Object[1];
    		Parameters[0] = true;
    		objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    		objApp_Late.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
    			null, objApp_Late, Parameters );
    	}
    	catch( Exception theException ) 
    	{
    		String errorMessage;
    		errorMessage = "Error: ";
    		errorMessage = String.Concat( errorMessage, theException.Message );
    		errorMessage = String.Concat( errorMessage, " Line: " );
    		errorMessage = String.Concat( errorMessage, theException.Source );
    
    		MessageBox.Show( errorMessage, "Error" );
    	}
    }
    					
  5. 코드 창의 맨 위로 스크롤합니다. using 지시문 목록의 끝에 다음 행을 추가합니다.
    using System.Reflection; 
    					

참조

자세한 내용을 보려면 다음 MSDN(Microsoft Developer Network) 웹 사이트를 방문하십시오.
Visual Studio를 사용한 Microsoft Office 개발
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnoxpta/html/vsofficedev.asp(영문)
바인딩에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
245115 INFO: 자동화에서 초기 바인딩 및 후기 바인딩 사용
244167 INFO: 여러 Office 버전용 자동화 클라이언트 작성
247579 INFO: 가능한 한 항상 DISPID 바인딩을 사용하여 Office 응용 프로그램 자동화




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 302902 - 마지막 검토: 2006년 8월 14일 월요일 - 수정: 7.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
키워드:?
kbpia kbautomation kbhowtomaster KB302902

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com