Использование элемента управления WebBrowser в Visual Basic для открытия документа Office

Сведения о версии Microsoft Visual C# 2005 и Microsoft Visual C# .NET в этой статье см. в 304662.

Аннотация

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

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

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

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

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

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

Примечание.

При использовании двух описанных выше методов для создания приложения Visual Basic, которое открывает документы Office, необходимо изменить код в Visual Studio 2005. По умолчанию Visual Basic добавляет одну форму в проект при создании Windows Forms проекта. Форма называется Form1. Два файла, представляющих форму, имеют имена Form1.vb и Form1.designer.vb. Вы пишете код в Form1.vb. В файле Form1.designer.vb конструктор Windows Forms код, реализующий все выполняемые действия путем перетаскивания элементов управления с панели элементов.

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

Способ 1

  1. В Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET создайте проект приложения Windows с помощью Visual Basic 2005 или Visual Basic .NET. Form1 создается по умолчанию.

  2. В меню "Сервис " щелкните "Настроить панель элементов", чтобы открыть диалоговое окно "Настройка панели элементов". На вкладке COM Components (Компоненты COM) добавьте ссылку на Microsoft WebBrowser. Нажмите кнопку "ОК", чтобы добавить элемент управления WebBrowser на Windows Forms элементов. Элемент управления WebBrowser отображается с обозревателем текста на панели элементов.

    Примечание В Visual Studio 2005 не нужно делать шаг 2.

  3. С помощью панели элементов добавьте элемент управления WebBrowser, элемент Управления OpenFileDialog и элемент управления Button в Form1. Этот шаг добавляет переменную-член AxWebBrowser1, переменную-член OpenFileDialog1 и переменную-член Button1 в класс Form1.

  4. Определите закрытый член в классе Form1 следующим образом.

    Dim oDocument as Object
    
  5. Вставьте следующий код в класс Form1.

    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    
    Dim strFileName As String
    
    'Find the Office document.
        With OpenFileDialog1
            .FileName = ""
            .ShowDialog()
            strFileName = .FileName
        End With
    
    'If the user does not cancel, open the document.
        If strFileName.Length Then
            oDocument = Nothing
            AxWebBrowser1.Navigate(strFileName)
        End If
    
    End Sub
    
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
       System.EventArgs) Handles MyBase.Load
    
    Button1.Text = "Browse"
    
    With OpenFileDialog1
            .Filter = "Office Documents " & _
            "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
            .FilterIndex = 1
        End With
    
    End Sub
    
    Private Sub Form1_Closing(ByVal sender As Object, ByVal e As _
       System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    
    oDocument = Nothing
    
    End Sub
    
    Private Sub AxWebBrowser1_NavigateComplete2(ByVal sender As Object, _
       ByVal e As AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event) _
       Handles AxWebBrowser1.NavigateComplete2
    
    On Error Resume Next
    
    oDocument = e.pDisp.Document
    
    'Note: You can use the reference to the document object to
        '      automate the document server.
        MsgBox("File opened by: " & oDocument.Application.Name)
    
    End Sub
    

Способ 2

  1. В Microsoft Visual Studio 2005 или Microsoft Visual Studio .NET создайте проект приложения Windows с помощью Visual Basic 2005 или Visual Basic .NET. Form1 создается по умолчанию.

  2. В меню "Проект" выберите "Компоненты", чтобы открыть диалоговое окно "Компоненты". В диалоговом окне "Компоненты" добавьте ссылки на элемент управления "Общий диалог" (Майкрософт) и "Элементы управления Интернетом (Майкрософт)". Нажмите кнопку "ОК", чтобы добавить элементы на панель элементов.

  3. Добавьте экземпляр элемента управления WebBrowser, элемента управления CommonDialog и commandButton в Form1.

  4. Затем добавьте следующий код в окно кода для Form1:

    Option Explicit
    
    Dim oDocument As Object
    
    Private Sub Command1_Click()
       Dim sFileName As String
    
     ' Find an Office file...
       With CommonDialog1
          .FileName = ""
          .ShowOpen
          sFileName = .FileName
       End With
    
     ' If the user didn't cancel, open the file...
       If Len(sFileName) Then
          Set oDocument = Nothing
          WebBrowser1.Navigate sFileName
       End If
    End Sub
    
    Private Sub Form_Load()
       Command1.Caption = "Browse"
       ' For the 2007 Microsoft Office documents, change the .Filter parameter of the 
       ' With CommonDialog1 statement to:
       ' .Filter = "Office Documents " & _
       '      "(*.docx, *.xlsx, *.pptx)|*.docx;*.xlsx;*.pptx"
       With CommonDialog1
          .Filter = "Office Documents " & _
          "(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt"
          .FilterIndex = 1
          .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly
       End With
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
       Set oDocument = Nothing
    End Sub
    
    Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, _
    URL As Variant)
       On Error Resume Next
       Set oDocument = pDisp.Document
    
       MsgBox "File opened by: " & oDocument.Application.Name
    End Sub
    

Рекомендации по использованию элемента управления WebBrowser

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

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

  • Элемент управления WebBrowser не поддерживает слияние меню.

  • Элемент управления WebBrowser обычно скрывает закрепленные панели инструментов перед отображением документа Office. Вы можете использовать службу автоматизации для отображения плавающей панели инструментов с помощью следующего кода.

    With oDocument.Application.CommandBars("Standard")
       .Position = 4 '[msoBarFloating]
       .Visible = True
    End With
    
    

    Более новые версии 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...
    AxWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER)
    
  • Существует несколько известных проблем с наличием нескольких элементов управления WebBrowser в проекте и загрузкой каждого элемента управления с одним типом документа Office (т. е. всех документов Word или всех электронных таблиц Excel). Рекомендуется использовать только один элемент управления для каждого проекта и перейти к одному документу за раз.

    Наиболее распространенная проблема связана с панели команд 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

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