Como usar o controle WebBrowser no Visual Basic para abrir um documento do Office

Para obter uma versão do Microsoft Visual C# 2005 e do Microsoft Visual C# .NET deste artigo, consulte 304662.

Resumo

Talvez você queira exibir ou inserir um documento do Microsoft Office diretamente em um formulário do Microsoft Visual Basic. O Microsoft Visual Basic 2005 e o Visual Basic .NET não fornecem um controle OLE que permite inserir um documento do Office em um formulário. Se você quiser inserir um documento existente e abri-lo como um objeto de documento ActiveX in-loco em um formulário do Visual Basic, uma solução potencial para você é usar o controle WebBrowser.

Este artigo demonstra como navegar até um documento existente do Office e exibi-lo em um formulário do Visual Basic usando o controle WebBrowser.

Informações adicionais

Documentos ActiveX são objetos OLE inseríveis que se comportam mais como controles ActiveX do que objetos OLE tradicionais. Ao contrário de um objeto inserido tradicional, um documento ActiveX não foi projetado para ser um objeto contido em um documento maior. Em vez disso, ele é considerado em si um documento completo que está apenas sendo exibido (como com o Microsoft Internet Explorer) ou coletado em um único recurso com outros documentos (como um arquivo do Microsoft Office Binder). Um documento ActiveX hospedado no controle WebBrowser está sempre ativo; portanto, ao contrário dos objetos inseridos OLE tradicionais, não há sentido de ativação in-loco.

Embora o Microsoft Visual Basic .NET e o Visual Basic 2005 não deem suporte à hospedagem de documentos ActiveX diretamente, você pode usar o controle WebBrowser para essa finalidade. O controle WebBrowser (Shdocvw.dll) faz parte do Internet Explorer e só pode ser usado em sistemas que têm o Internet Explorer instalado.

Criando um aplicativo do Visual Basic que abre documentos do Office

Observação

Ao usar dois métodos acima para criar um aplicativo do Visual Basic que abre documentos do Office, você deve alterar o código no Visual Studio 2005. Por padrão, o Visual Basic adiciona um formulário ao projeto quando você cria um Windows Forms projeto. O formulário é denominado Form1. Os dois arquivos que representam o formulário são chamados Form1.vb e Form1.designer.vb. Você escreve o código em Form1.vb. O arquivo Form1.designer.vb é onde o designer Windows Forms grava o código que implementa todas as ações executadas arrastando e soltando controles da Caixa de Ferramentas.

Depois que o aplicativo do Visual Basic for criado, pressione F5 para executar o projeto. Quando você clica em Procurar, a caixa de diálogo Abrir é exibida e permite que você navegue até um arquivo do Word, Excel ou PowerPoint. Selecione qualquer arquivo e clique em Abrir. O documento é aberto dentro do controle WebBrowser e uma caixa de mensagem que exibe o nome do servidor de documentos do Office é exibida

Método 1

  1. No Microsoft Visual Studio 2005 ou no Microsoft Visual Studio .NET, crie um projeto de aplicativo do Windows usando o Visual Basic 2005 ou o Visual Basic .NET. O Form1 é criado por padrão.

  2. No menu Ferramentas , clique em Personalizar Caixa de Ferramentas para abrir a caixa de diálogo Personalizar Caixa de Ferramentas. Na guia Componentes COM , adicione uma referência ao Microsoft WebBrowser. Clique em OK para adicionar o controle WebBrowser à Windows Forms de ferramentas. O controle WebBrowser aparece com o Gerenciador de texto na caixa de ferramentas.

    Nota No Visual Studio 2005, você não precisa realizar a etapa 2.

  3. Usando a Caixa de Ferramentas, adicione um controle WebBrowser, um controle OpenFileDialog e um controle Button ao Form1. Esta etapa adiciona a variável de membro AxWebBrowser1, a variável de membro OpenFileDialog1 e a variável de membro Button1 à classe Form1.

  4. Defina um membro privado na classe Form1 da seguinte maneira.

    Dim oDocument as Object
    
  5. Cole o código a seguir na classe 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
    

Método 2

  1. No Microsoft Visual Studio 2005 ou no Microsoft Visual Studio .NET, crie um projeto de aplicativo do Windows usando o Visual Basic 2005 ou o Visual Basic .NET. O Form1 é criado por padrão.

  2. No menu Projeto, selecione Componentes para abrir a caixa de diálogo Componentes. Na caixa de diálogo Componentes, adicione referências ao Controle de Caixa de Diálogo Comum da Microsoft e aos Controles da Internet da Microsoft. Clique em OK para adicionar os itens à caixa de ferramentas.

  3. Adicione uma instância do controle WebBrowser, do controle CommonDialog e de um CommandButton ao Form1.

  4. Em seguida, adicione o seguinte código à janela Código do 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
    

Considerações ao usar o controle WebBrowser

Você deve considerar o seguinte ao usar o controle WebBrowser:

  • O controle WebBrowser navega para documentos de forma assíncrona. Quando você chama WebBrowser1.Navigate, a chamada retorna o controle para seu aplicativo do Visual Basic antes que o documento seja completamente carregado. Se você planeja automatizar o documento contido, precisará usar o evento NavigateComplete2 para ser notificado quando o documento terminar de carregar. Use a propriedade Document do objeto WebBrowser que é passado para obter uma referência ao objeto de documento do Office, que, no código anterior, está definido como oDocument.

  • O controle WebBrowser não dá suporte à mesclagem de menus.

  • O controle WebBrowser geralmente oculta todas as barras de ferramentas encaixadas antes de exibir um documento do Office. Você pode usar a Automação para mostrar uma barra de ferramentas flutuante usando código como o seguinte.

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

    As versões mais recentes do Internet Explorer (5.0 e posterior) também permitem exibir barras de ferramentas encaixadas usando o código a seguir.

    ' 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)
    
  • Há vários problemas conhecidos em ter mais de um controle WebBrowser em um projeto e ter cada controle carregado com o mesmo tipo de documento do Office (ou seja, todos os documentos do Word ou todas as planilhas do Excel). É recomendável que você use apenas um controle por projeto e navegue até um documento por vez.

    O problema mais comum é com as barras de comandos do Office, que aparecem desabilitadas. Se você tiver dois controles WebBrowser no mesmo formulário, ambos carregados com documentos do Word e tiver exibido barras de ferramentas usando uma das técnicas anteriores, apenas um conjunto de barras de ferramentas estará ativo e funcionará corretamente. O outro está desabilitado e não pode ser usado.

  • Para limpar o WebBrowser de seu conteúdo atual, no evento Click de outro botão de comando (ou em algum outro local apropriado em seu código), navegue até a página em branco padrão usando o seguinte código:

       AxWebBrowser1.Navigate("about:blank")
    

Considerações ao usar o controle WebBrowser junto com um programa do Microsoft Office 2007

Por padrão, os programas do Office 2007 não abrem documentos do Office no navegador da Web. Esse comportamento também afeta o controle WebBrowser. Recomendamos que você use um contêiner de documentos ActiveX personalizado em vez do controle WebBrowser ao desenvolver aplicativos que abrem documentos do Office 2007.

Para aplicativos existentes que exigem compatibilidade com versões anteriores com o controle WebBrowser, você pode modificar o registro para configurar o Internet Explorer. Você pode usar esse método para configurar o Internet Explorer para abrir documentos do Office 2007 no navegador da Web. Para obter mais informações, clique no seguinte número de artigo para exibir o artigo na Base de Dados de Conhecimento Microsoft:

927009 uma nova janela é aberta quando você tenta exibir um documento de programa do Microsoft Office 2007 no Windows Internet Explorer 7

Nota Se você modificar o registro usando o método mencionado no artigo da Base de Dados de Conhecimento 927009, as alterações afetarão o controle WebBrowser que você usa no aplicativo. As alterações também afetam todas as instâncias do Internet Explorer. Além disso, esse método pode não funcionar para nenhuma versão futura dos pacotes do Microsoft Office. Portanto, recomendamos que você use esse método somente para compatibilidade com um aplicativo existente.

Referências

Para obter mais informações sobre como usar o controle WebBrowser, clique nos seguintes números de artigo para exibir os artigos na Base de Dados de Conhecimento Microsoft:

304562 Visual Studio 2005 e Visual Studio .NET não fornecem um controle de contêiner OLE para Windows Forms

927009 uma nova janela é aberta quando você tenta exibir um documento de programa do Microsoft Office 2007 no Windows Internet Explorer 7