Como utilizar o controlo WebBrowser no Visual Basic para abrir um documento do Office

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

Resumo

Poderá querer apresentar ou incorporar um documento do Microsoft Office diretamente num formulário do Microsoft Visual Basic. O Microsoft Visual Basic 2005 e o Visual Basic .NET não fornecem um controlo OLE que lhe permite incorporar um documento do Office num formulário. Se quiser incorporar um documento existente e abri-lo como um objeto de documento ActiveX no local num formulário do Visual Basic, uma possível solução para si é utilizar o controlo WebBrowser.

Este artigo demonstra como procurar um documento existente do Office e exibi-lo num formulário do Visual Basic ao utilizar o controlo WebBrowser.

Mais Informações

Os documentos ActiveX são objetos OLE incorporados que se comportam mais como controlos ActiveX do que objetos OLE tradicionais. Ao contrário de um objeto tradicional incorporado, um documento ActiveX não foi concebido para ser um objeto contido num documento maior. Em vez disso, é considerado, por si só, um documento completo que está apenas a ser visto (como com o Microsoft Internet Explorer) ou recolhido num único recurso com outros documentos (como um ficheiro do Microsoft Office Binder). Um documento ActiveX aloado no controlo WebBrowser está sempre ativo; portanto, ao contrário dos objetos OLE tradicionais incorporados, não há noção da ativação no local.

Embora o Microsoft Visual Basic .NET e o Visual Basic 2005 não suportem atualmente o alojo de documentos ActiveX diretamente, pode utilizar o controlo WebBrowser para esta finalidade. O controlo WebBrowser (Shdocvw.dll) faz parte do Internet Explorer e só pode ser utilizado em sistemas com o Internet Explorer instalado.

Criar uma aplicação do Visual Basic que abre documentos do Office

Nota

Quando utilizar dois métodos acima para criar uma aplicação do Visual Basic que abra documentos do Office, tem de alterar o código no Visual Studio 2005. Por predefinição, o Visual Basic adiciona um formulário ao projeto quando cria um Windows Forms projeto. O formulário tem o nome Formulário1. Os dois ficheiros que representam o formulário são denominados Formulário1.vb e Form1.designer.vb. O código é escrito no formulário1.vb. O ficheiro Form1.designer.vb é onde o Estruturador do Windows Forms escreve o código que implementa todas as ações que efetuou ao arrastar e largar controlos da Caixa de Ferramentas.

Após criar a aplicação do Visual Basic, prima F5 para executar o projeto. Quando clica em Procurar, é apresentada a caixa de diálogo Abrir e permite-lhe procurar um ficheiro do Word, Excel ou PowerPoint. Selecione um ficheiro e clique em Abrir. O documento é aberto dentro do controlo WebBrowser e é apresentada uma caixa de mensagem que apresenta o nome do servidor de documentos do Office

Método 1:

  1. No Microsoft Visual Studio 2005 ou no Microsoft Visual Studio .NET, crie um projeto de Aplicação do Windows com o Visual Basic 2005 ou Visual Basic .NET. O formulário1 é criado por predefinição.

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

    Nota No Visual Studio 2005, não tem de fazer o passo 2.

  3. Ao utilizar a Caixa de Ferramentas, adicione um controlo WebBrowser, um controlo OpenFileDialog e um controlo Botão ao Formulário1. Este passo adiciona a variável de membro AxWebBrowser1, a variável de membro OpenFileDialog1 e a variável de membro Botão1 à classe Formulário1.

  4. Defina um membro privado na turma Formulário1 da seguinte forma.

    Dim oDocument as Object
    
  5. Colar o seguinte código na classe Formulário1.

    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 Aplicação do Windows com o Visual Basic 2005 ou Visual Basic .NET. O formulário1 é criado por predefiniçã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 Controlo de Caixa de Diálogo Comum da Microsoft e aos Controlos de Internet da Microsoft. Clique em OK para adicionar os itens à caixa de ferramentas.

  3. Adicione uma instância do controlo WebBrowser, o controlo CommonDialog e um BotãoDe Comando ao Formulário1.

  4. Em seguida, adicione o seguinte código à janela Código para o Formulário1:

    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 a ter ao utilizar o controlo WebBrowser

Deve ter em consideração o seguinte quando utilizar o controlo WebBrowser:

  • O controlo WebBrowser navega para documentos assíncronamente. Quando liga para WebBrowser1.Navigate, a chamada devolve o controlo à sua aplicação do Visual Basic antes de o documento ter sido completamente carregado. Se planeia Automatizar o documento contido, tem de utilizar o evento NavegarCompleto2 para ser notificado quando o documento terminar de carregar. Utilize a propriedade Documento do objeto WebBrowser transmitido para obter uma referência ao objeto de documento do Office que, no código anterior, está definido como oDocument.

  • O controlo WebBrowser não suporta a ressarcimento de menus.

  • Geralmente, o controlo WebBrowser oculta quaisquer barras de ferramentas ancoradas antes de apresentar um documento do Office. Pode utilizar o Automation para mostrar uma barra de ferramentas flutuante ao utilizar código, tal 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 posteriores) também lhe permitem apresentar barras de ferramentas na dock com o seguinte código.

    ' 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)
    
  • Existem vários problemas conhecidos com ter mais do que um controlo do WebBrowser num projeto e ter cada controlo carregado com o mesmo tipo de documento do Office (ou seja, todos os documentos do Word ou todas as páginas de dados do Excel). Recomenda-se que utilize apenas um controlo por projeto e navegue para um documento de cada vez.

    O problema mais comum é as barras de comando do Office, que aparecem desativadas. Se tiver dois controlos do WebBrowser no mesmo formulário, ambos carregados com documentos do Word e tiver apresentado barras de ferramentas ao utilizar uma das técnicas anteriores, apenas um conjunto de barras de ferramentas está ativo e funciona corretamente. O outro está desativado e não pode ser utilizado.

  • Para limpar o WebBrowser dos seus conteúdos atuais, no evento Click de outro botão de comando (ou noutro local adequado no seu código), navegue para a página em branco predefinida utilizando o seguinte código:

       AxWebBrowser1.Navigate("about:blank")
    

Considerações a ter ao utilizar o controlo WebBrowser juntamente com um programa do Microsoft Office 2007

Por predefinição, os programas do Office 2007 não abrem documentos do Office no browser. Este comportamento também afeta o controlo do WebBrowser. Recomendamos que utilize um contentor de documentos ActiveX personalizado em vez do controlo WebBrowser quando desenvolver aplicações que abram documentos do Office 2007.

Para aplicações existentes que necessitem de retrocompatibilidade com o controlo WebBrowser, pode modificar o registo para configurar o Internet Explorer. Pode utilizar este método para configurar o Internet Explorer para abrir documentos do Office 2007 no browser. Para obter mais informações, clique no seguinte número de artigo para ver o artigo na Base de Dados de Conhecimento Microsoft:

927009 É aberta uma nova janela quando tenta ver um documento do programa do Microsoft Office 2007 no Windows Internet Explorer 7

Nota Se modificar o registo utilizando o método mencionado no artigo da Base de Dados de Conhecimento 927009, as alterações afetam o controlo WebBrowser que utiliza na aplicação. As alterações também afetam todas as instâncias do Internet Explorer. Além disso, este método poderá não funcionar em quaisquer versões futuras dos conjuntos de ativos do Microsoft Office. Por essa razão, recomendamos que utilize este método apenas para compatibilidade com uma aplicação existente.

Referências

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

304562 Visual Studio 2005 e Visual Studio .NET não fornecem um controlo de contentor OLE para Windows Forms

927009 É aberta uma nova janela quando tenta ver um documento do programa do Microsoft Office 2007 no Windows Internet Explorer 7