WebBrowser 컨트롤을 사용하여 Visual C# 2005 또는 Visual C# .NET에서 Office 문서를 여는 방법

이 문서의 Microsoft Visual Basic .NET 버전은 304643 참조하세요.

요약

Microsoft Visual C# 양식에 Microsoft Office 문서를 직접 표시하거나 포함할 수 있습니다. Microsoft Visual C# 2005 및 Microsoft Visual C# .NET은 양식에 Office 문서를 포함할 수 있는 OLE 컨트롤을 제공하지 않습니다. 기존 문서를 포함하고 Visual C# 양식에서 현재 위치 ActiveX 문서 개체로 열려면 Microsoft WebBrowser 컨트롤을 사용할 수 있습니다.

이 문서에서는 기존 Office 문서를 찾아보는 방법과 WebBrowser 컨트롤을 사용하여 Visual C# 양식 내에 표시하는 방법을 보여 줍니다.

추가 정보

ActiveX 문서는 기존 OLE 개체보다 ActiveX 컨트롤처럼 동작하는 포함 가능한 OLE 개체입니다. 기존 포함된 개체와 달리 ActiveX 문서는 더 큰 문서에 포함된 개체로 설계되지 않았습니다. 대신 Microsoft Internet Explorer와 같이 단순히 보거나 다른 문서(예: Microsoft Office 바인더 파일)를 사용하여 단일 리소스로 수집되는 전체 문서로 간주됩니다. WebBrowser 컨트롤에서 호스트되는 ActiveX 문서는 항상 활성 상태입니다. 따라서 기존 OLE 포함 개체와 달리 현재 위치 정품 인증은 없습니다.

Visual C# 2005 및 Visual C# .NET은 현재 ActiveX 문서 호스팅을 직접 지원하지 않지만 이 목적을 위해 WebBrowser 컨트롤을 사용할 수 있습니다. WebBrowser 컨트롤(Shdocvw.dll)은 Internet Explorer의 일부이며 Internet Explorer가 설치된 시스템에서만 사용할 수 있습니다.

Office 문서를 여는 Visual C# 애플리케이션 만들기

Office 문서를 여는 Visual C# 애플리케이션을 만들려면 다음 단계를 수행합니다.

  1. Visual C# 2005 또는 Visual C# .NET에서 새 Windows 애플리케이션 프로젝트를 만듭니다. Form1은 기본적으로 만들어집니다.

    참고 Visual C# 2005에서 SHDocVw.dll 파일이나 AxSHDocVw.dll 파일을 찾을 수 없는 경우 Visual Studio 명령 프롬프트에서 다음 명령을 실행합니다.

    aximp %WINDIR%\system32\shdocvw.dll
    

    그런 다음 Microsoft Web Browser 컨트롤에 대한 공용 언어 런타임 프록시(SHDocVw.dll) 및 Windows Forms 프록시(AxSHDocVw.dll)를 만듭니다. Visual C# 2005에서 DLL 파일을 추가하려면 다음 단계를 수행합니다.

    1. 프로젝트 메뉴에서 참조 추가를 클릭합니다.
    2. 참조 추가 대화 상자에서 찾아보기를 클릭합니다.
    3. AxSHDocVw.dll 파일 및 SHDocVw.dll 파일을 찾아 선택합니다.
    4. 이 두 파일에 대한 프로젝트 참조를 추가하려면 [확인]을 클릭하십시오.
  2. 도구 메뉴에서 도구 상자 사용자 지정을 클릭하여 도구 상자 사용자 지정 대화 상자를 엽니다. COM 구성 요소 탭에서 Microsoft WebBrowser에 대한 참조를 추가합니다. 확인을 클릭하여 WebBrowser 컨트롤을 Windows Forms 도구 상자에 추가합니다. WebBrowser 컨트롤은 도구 상자에 텍스트 탐색기와 함께 표시됩니다.

    참고 Visual Studio 2005에서는 2단계를 수행할 필요가 없습니다.

  3. 도구 상자를 사용하여 WebBrowser 컨트롤, OpenFileDialog 컨트롤 및 CommandButton 컨트롤을 Form1에 추가합니다. 그러면 AxWebBrowser1, OpenFileDialog1 및 Button1 멤버 변수가 Form1 클래스에 추가됩니다. Visual C# 2005에서는 webBrowser1, openFileDialog1 및 button1 멤버 변수가 추가됩니다.

  4. Form1에서 Button1을 두 번 클릭합니다. 그러면 form1에 Button1_Click 이벤트가 추가되었습니다.

  5. Form1의 코드 창에서 목록에 다음 네임스페이스를 추가합니다.

    using System.Reflection;
    
  6. 다음과 같이 Form1 클래스에서 프라이빗 멤버를 정의합니다.

    private Object oDocument;
    
  7. Form1 클래스의 InitializeComponent 메서드 끝에 다음 코드를 추가하여 Form1_Load, Form1_Closed 및 axWebBrowser1_NavigateComplete2 이벤트를 처리합니다.

    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed);
    
  8. 다음 코드 바꾸기

    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    
    

    with:

    private void button1_Click(object sender, System.EventArgs e)
    {
    
    String  strFileName;
    
    //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    
    //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
    //Note: You can use the reference to the document object to 
     //      automate the document server.
    
    Object o = e.pDisp;
    
    oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    
    Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
    Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
    MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    
    

    참고 Visual Studio 2005에서 코드를 변경해야 합니다. 기본적으로 Visual C#은 Windows Forms 프로젝트를 만들 때 프로젝트에 하나의 양식을 추가합니다. 폼의 이름은 Form1입니다. 폼을 나타내는 두 파일의 이름은 Form1.cs 및 Form1.designer.cs입니다. Form1.cs에서 코드를 작성합니다. Form1.designer.cs 파일은 Windows Forms 디자이너가 도구 상자에서 컨트롤을 끌어서 놓아 수행한 모든 작업을 구현하는 코드를 작성하는 위치입니다.

    Visual C# 2005의 Windows Forms Designer에 대한 자세한 내용은 다음 MSDN(Microsoft Developer Network) 웹 사이트를 참조하세요.https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. F5 키를 눌러 프로젝트를 실행합니다. 찾아보기를 클릭하면 열기 대화 상자가 나타나고 Word 문서, Excel 워크시트 또는 PowerPoint 프레젠테이션으로 이동할 수 있습니다. 파일을 선택한 다음 열기를 클릭합니다. 문서가 WebBrowser 컨트롤 내에서 열리고 Office 문서 서버의 이름을 표시하는 메시지 상자가 나타납니다.

WebBrowser 컨트롤을 사용할 때 고려해야 할 사항

WebBrowser 컨트롤을 사용하는 경우 다음을 고려해야 합니다.

  • WebBrowser 컨트롤은 문서를 비동기적으로 찾습니다. WebBrowser1.Navigate를 호출하면 문서가 완전히 로드되기 전에 호출이 Visual C# 애플리케이션에 컨트롤을 반환합니다. 포함된 문서를 자동화하려는 경우 문서 로드가 완료되면 NavigateComplete2 이벤트를 사용하여 알림을 받아야 합니다. 전달된 WebBrowser 개체의 Document 속성을 사용하여 이전 코드에서 oDocument로 설정된 Office 문서 개체에 대한 참조를 가져옵니다.

  • WebBrowser 컨트롤은 메뉴 병합을 지원하지 않습니다.

  • Internet Explorer 버전 5.0 이상에서는 다음 코드를 사용하여 도킹된 도구 모음을 표시할 수 있습니다.

     // This is a toggle option, so call it once to show the 
     // toolbars and once to hide them. This works with Internet Explorer 5
     // but often fails to work properly with earlier versions.
    
    Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    
  • 프로젝트에서 둘 이상의 WebBrowser 컨트롤을 사용하고 각 컨트롤을 동일한 유형의 Office 문서(즉, 모든 Word 문서 또는 모든 Excel 워크시트)로 로드하는 경우 몇 가지 알려진 문제가 있습니다. 각 프로젝트에 대해 하나의 컨트롤만 사용하고 한 번에 하나의 문서로 찾아보는 것이 좋습니다.

    가장 일반적인 문제는 비활성화된 것처럼 보이는 Microsoft Office 명령 모음입니다. 동일한 양식에 두 개의 WebBrowser 컨트롤이 있는 경우 둘 다 Word 문서와 함께 로드되고 이전 기술 중 하나를 사용하여 도구 모음을 표시한 경우 하나의 도구 모음만 활성 상태이며 올바르게 작동합니다. 다른 하나는 사용하지 않도록 설정되어 있으며 사용할 수 없습니다.

  • 현재 콘텐츠의 WebBrowser 컨트롤을 지우려면 다른 명령 단추의 Click 이벤트(또는 코드의 다른 적절한 위치에서)에서 다음 코드를 사용하여 기본 빈 페이지로 이동합니다.

       AxWebBrowser1.Navigate("about:blank");
    

WebBrowser 컨트롤을 2007 Microsoft Office 프로그램과 함께 사용할 때 고려해야 할 사항

기본적으로 2007 Office 프로그램은 웹 브라우저에서 Office 문서를 열지 않습니다. 이 동작은 WebBrowser 컨트롤에도 영향을 줍니다. 2007 Office 문서를 여는 애플리케이션을 개발할 때 WebBrowser 컨트롤 대신 사용자 지정 ActiveX 문서 컨테이너를 사용하는 것이 좋습니다.

WebBrowser 컨트롤과의 이전 버전과의 호환성이 필요한 기존 애플리케이션의 경우 Internet Explorer를 구성하도록 레지스트리를 수정할 수 있습니다. 이 방법을 사용하여 웹 브라우저에서 2007 Office 문서를 열도록 Internet Explorer를 구성할 수 있습니다. 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 문서를 확인합니다.

927009 Windows Internet Explorer 7에서 2007 Microsoft Office 프로그램 문서를 보려고 하면 새 창이 열립니다.

참고

927009 Microsoft 기술 자료 문서에 설명된 방법을 사용하여 레지스트리를 수정하는 경우 변경 내용은 애플리케이션에서 사용하는 WebBrowser 컨트롤에 영향을 줍니다. 변경 내용은 Internet Explorer의 모든 인스턴스에도 영향을 줍니다. 또한 이 방법은 이후 버전의 Microsoft Office 제품군에서는 작동하지 않을 수 있습니다. 따라서 기존 애플리케이션과의 호환성을 위해서만 이 메서드를 사용하는 것이 좋습니다.

참조

WebBrowser 컨트롤을 사용하는 방법에 대한 자세한 내용은 다음 문서 번호를 클릭하여 Microsoft 기술 자료의 문서를 확인합니다.

  • 304562 Visual Studio 2005 및 Visual Studio .NET은 Windows Forms 대한 OLE 컨테이너 컨트롤을 제공하지 않습니다.

  • 243058 WebBrowser 컨트롤을 사용하여 Office 문서를 여는 방법

  • 927009 Windows Internet Explorer 7에서 2007 Microsoft Office 프로그램 문서를 보려고 하면 새 창이 열립니다.