Как использовать элемент управления WebBrowser для открытия документов Office в Visual C# 2005 или в Visual C# .NET

Сведения о версии microsoft Visual Basic .NET в этой статье см. в 304643.

Аннотация

Может потребоваться отобразить или внедрить документ Microsoft Office непосредственно в форму Microsoft Visual C#. Microsoft Visual C# 2005 и Microsoft Visual C# .NET не предоставляют элемент управления OLE, который позволяет внедрять документ Office в форму. Если вы хотите внедрить существующий документ и открыть его как объект документа ActiveX на месте в форме Visual C#, можно использовать элемент управления Microsoft WebBrowser.

В этой статье показано, как перейти к существующему документу Office и отобразить его в форме Visual C# с помощью элемента управления WebBrowser.

Дополнительная информация

Документы ActiveX — это встраиваемые объекты OLE, которые ведут себя больше как элементы ActiveX, чем традиционные объекты OLE. В отличие от традиционного внедренного объекта, документ ActiveX не является автономным объектом в более крупном документе. Вместо этого он сам по себе считается полным документом, который просто просматривается (например, в Microsoft Internet Explorer) или собирается в один ресурс с другими документами (например, файлом привязки Microsoft Office). Документ ActiveX, размещенный в элементе управления WebBrowser, всегда активен; Поэтому, в отличие от традиционных внедренных объектов OLE, нет смысла активации на месте.

Хотя Visual C# 2005 и Visual C# .NET в настоящее время не поддерживают размещение документов ActiveX напрямую, для этой цели можно использовать элемент управления WebBrowser. Элемент управления WebBrowser (Shdocvw.dll) является частью Internet Explorer и может использоваться только в системах, на которых установлен Internet Explorer.

Создание приложения Visual C#, которое открывает документы Office

Чтобы создать приложение Visual C#, которое открывает документы Office, выполните следующие действия.

  1. Создайте проект приложения Windows в Visual C# 2005 или в Visual C# .NET. Form1 создается по умолчанию.

    Примечание Если в Visual C# 2005 не удается найти SHDocVw.dll или AxSHDocVw.dll, выполните следующую команду в командной строке Visual Studio:

    aximp %WINDIR%\system32\shdocvw.dll
    

    Затем создайте прокси-сервер среды CLR (SHDocVw.dll) и прокси-Windows Forms (AxSHDocVw.dll) для элемента управления Microsoft Web Browser. Чтобы добавить DLL-файлы в Visual C# 2005, выполните следующие действия.

    1. On the Project menu, click Add Reference.
    2. In the Add Reference dialog box, click Browse.
    3. Найдите и выберите AxSHDocVw.dll и SHDocVw.dll файл.
    4. Чтобы добавить ссылки на проект для этих двух файлов, нажмите кнопку "ОК".
  2. В меню "Сервис" щелкните "Настроить панель элементов", чтобы открыть диалоговое окно "Настройка панели элементов". На вкладке COM Components (Компоненты 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. При этом событие Button1_Click в Form1.

  5. В окне кода form1 добавьте в список следующее пространство имен:

    using System.Reflection;
    
  6. Определите закрытый член в классе Form1 следующим образом:

    private Object oDocument;
    
  7. В конце метода InitializeComponent класса Form1 добавьте следующий код для обработки событий 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)
    {
    }
    
    

    на:

    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 записывает код, реализующий все выполняемые действия путем перетаскивания элементов управления с панели элементов.

    Дополнительные сведения о конструкторе Windows Forms в Visual C# 2005 см. на следующем веб-сайте Microsoft Developer Network (MSDN):https://msdn.microsoft.com/en-us/library/ms173077.aspx

  9. Нажмите клавишу F5, чтобы запустить проект. При нажатии кнопки "Обзор" откроется диалоговое окно "Открыть", в котором можно перейти к документу Word, листу Excel или презентации PowerPoint. Выберите любой файл и нажмите кнопку "Открыть". Документ откроется в элементе управления WebBrowser, и появится окно сообщения с именем сервера документов Office.

Что следует учитывать при использовании элемента управления WebBrowser

При использовании элемента управления WebBrowser следует учитывать следующее:

  • Элемент управления WebBrowser асинхронно просматривает документы. При вызове WebBrowser1.Navigate вызов возвращает элемент управления приложению Visual C# до полной загрузки документа. Если вы планируете автоматизировать автономный документ, необходимо использовать событие NavigateComplete2, чтобы получать уведомления о завершении загрузки документа. Используйте свойство Document объекта WebBrowser, передаваемого для получения ссылки на объект документа Office, который в приведенном выше коде имеет значение oDocument.

  • Элемент управления 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 вместе с программой Microsoft Office 2007

По умолчанию программы Office 2007 не открывают документы Office в веб-браузере. Это поведение также влияет на элемент управления WebBrowser. Мы рекомендуем использовать пользовательский контейнер документов ActiveX вместо элемента управления WebBrowser при разработке приложений, которые открывают документы Office 2007.

Для существующих приложений, для которых требуется обратная совместимость с элементом управления WebBrowser, можно изменить реестр, чтобы настроить Internet Explorer. Этот метод можно использовать для настройки Internet Explorer для открытия документов Office 2007 в веб-браузере. Для получения дополнительных сведений щелкните номер следующей статьи, чтобы просмотреть статью в базе знаний Майкрософт:

927009 откроется новое окно при попытке просмотреть документ программы Microsoft Office 2007 в Windows Internet Explorer 7

Примечание.

При изменении реестра с помощью метода, упомянутого в статье базы знаний Майкрософт 927009, изменения влияют на элемент управления WebBrowser, используемый в приложении. Изменения также влияют на все экземпляры Internet Explorer. Кроме того, этот метод может не работать для будущих версий наборов Microsoft Office. Поэтому мы рекомендуем использовать этот метод только для совместимости с существующим приложением.

Ссылки

Дополнительные сведения об использовании элемента управления WebBrowser см. в следующих номерах статей, чтобы просмотреть статьи в базе знаний Майкрософт:

  • 304562 Visual Studio 2005 и Visual Studio .NET не предоставляют элемент управления контейнером OLE для Windows Forms

  • 243058 Как использовать элемент управления WebBrowser для открытия документа Office

  • 927009 откроется новое окно при попытке просмотреть документ программы Microsoft Office 2007 в Windows Internet Explorer 7