Cómo usar el control WebBrowser en Visual Basic para abrir un documento de Office

Para obtener una versión de Microsoft Visual C# 2005 y Microsoft Visual C# .NET de este artículo, consulte 304662.

Resumen

Es posible que quiera mostrar o insertar un documento de Microsoft Office directamente en un formulario de Microsoft Visual Basic. Microsoft Visual Basic 2005 y Visual Basic .NET no proporcionan un control OLE que le permite insertar un documento de Office en un formulario. Si desea insertar un documento existente y abrirlo como un objeto de documento ActiveX local dentro de un formulario de Visual Basic, una posible solución para usted es usar el control WebBrowser.

En este artículo se muestra cómo examinar un documento de Office existente y mostrarlo en un formulario de Visual Basic mediante el control WebBrowser.

Más información

Los documentos ActiveX son objetos OLE incrustables que se comportan más como controles ActiveX que los objetos OLE tradicionales. A diferencia de un objeto incrustado tradicional, un documento ActiveX no está diseñado para ser un objeto contenido en un documento mayor. En su lugar, se considera en sí mismo un documento completo que simplemente se está viendo (por ejemplo, con Microsoft Internet Explorer) o se recopila en un solo recurso con otros documentos (como un archivo binder de Microsoft Office). Siempre está activo un documento ActiveX hospedado en el control WebBrowser; por lo tanto, a diferencia de los objetos incrustados OLE tradicionales, no hay ninguna sensación de activación local.

Aunque Microsoft Visual Basic .NET y Visual Basic 2005 no admiten actualmente el hospedaje de documentos ActiveX directamente, puede usar el control WebBrowser para este propósito. El control WebBrowser (Shdocvw.dll) forma parte de Internet Explorer y solo se puede usar en sistemas que tengan instalado Internet Explorer.

Creación de una aplicación de Visual Basic que abre documentos de Office

Nota:

Cuando use dos métodos anteriores para crear una aplicación de Visual Basic que abra documentos de Office, debe cambiar el código en Visual Studio 2005. De forma predeterminada, Visual Basic agrega un formulario al proyecto al crear un proyecto de Windows Forms. El formulario se denomina Form1. Los dos archivos que representan el formulario se denominan Form1.vb y Form1.designer.vb. El código se escribe en Form1.vb. El archivo Form1.designer.vb es donde el Diseñador de Windows Forms escribe el código que implementa todas las acciones que realizó arrastrando y quitando controles desde el cuadro de herramientas.

Una vez creada la aplicación de Visual Basic, presione F5 para ejecutar el proyecto. Al hacer clic en Examinar, aparece el cuadro de diálogo Abrir y le permite ir a un archivo de Word, Excel o PowerPoint. Seleccione cualquier archivo y haga clic en Abrir. El documento se abre dentro del control WebBrowser y aparece un cuadro de mensaje que muestra el nombre del servidor de documentos de Office.

Método 1

  1. En Microsoft Visual Studio 2005 o en Microsoft Visual Studio .NET, cree un proyecto de aplicación de Windows mediante Visual Basic 2005 o Visual Basic .NET. Form1 se crea de forma predeterminada.

  2. En el menú Herramientas , haga clic en Personalizar cuadro de herramientas para abrir el cuadro de diálogo Personalizar cuadro de herramientas. En la pestaña Componentes COM , agregue una referencia a Microsoft WebBrowser. Haga clic en Aceptar para agregar el control WebBrowser al cuadro de herramientas de Windows Forms. El control WebBrowser aparece con el explorador de texto en el cuadro de herramientas.

    Nota En Visual Studio 2005, no es necesario realizar el paso 2.

  3. Con el cuadro de herramientas, agregue un control WebBrowser, un control OpenFileDialog y un control Button a Form1. En este paso se agregan la variable miembro AxWebBrowser1, la variable miembro OpenFileDialog1 y la variable miembro Button1 a la clase Form1.

  4. Defina un miembro privado en la clase Form1 como se indica a continuación.

    Dim oDocument as Object
    
  5. Pegue el código siguiente en la clase 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. En Microsoft Visual Studio 2005 o en Microsoft Visual Studio .NET, cree un proyecto de aplicación de Windows mediante Visual Basic 2005 o Visual Basic .NET. Form1 se crea de forma predeterminada.

  2. En el menú Proyecto, seleccione Componentes para abrir el cuadro de diálogo Componentes. En el cuadro de diálogo Componentes, agregue referencias al control de cuadro de diálogo común de Microsoft y a los controles de Microsoft Internet. Haga clic en Aceptar para agregar los elementos al cuadro de herramientas.

  3. Agregue una instancia del control WebBrowser, el control CommonDialog y un control CommandButton a Form1.

  4. A continuación, agregue el código siguiente a la ventana Código de 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
    

Consideraciones al usar el control WebBrowser

Debe tener en cuenta lo siguiente cuando use el control WebBrowser:

  • El control WebBrowser busca documentos de forma asincrónica. Al llamar a WebBrowser1.Navigate, la llamada devuelve el control a la aplicación de Visual Basic antes de que el documento se haya cargado por completo. Si tiene previsto automatizar el documento contenido, debe usar el evento NavigateComplete2 para recibir una notificación cuando el documento haya terminado de cargarse. Use la propiedad Document del objeto WebBrowser que se pasa para obtener una referencia al objeto de documento de Office, que, en el código anterior, se establece en oDocument.

  • El control WebBrowser no admite la combinación de menús.

  • Por lo general, el control WebBrowser oculta las barras de herramientas acopladas antes de mostrar un documento de Office. Puede usar Automation para mostrar una barra de herramientas flotante mediante código como el siguiente.

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

    Las versiones más recientes de Internet Explorer (5.0 y versiones posteriores) también permiten mostrar las barras de herramientas acopladas mediante el código siguiente.

    ' 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)
    
  • Hay varios problemas conocidos con tener más de un control WebBrowser en un proyecto y tener cada control cargado con el mismo tipo de documento de Office (es decir, todos los documentos de Word o todas las hojas de cálculo de Excel). Se recomienda usar solo un control por proyecto y buscar un documento a la vez.

    El problema más común es con las barras de comandos de Office, que aparecen deshabilitadas. Si tiene dos controles WebBrowser en el mismo formulario, ambos cargados con documentos de Word y ha mostrado barras de herramientas mediante una de las técnicas anteriores, solo un conjunto de barras de herramientas está activo y funciona correctamente. El otro está deshabilitado y no se puede usar.

  • Para borrar el WebBrowser de su contenido actual, en el evento Click de otro botón de comando (o en algún otro lugar adecuado del código), vaya a la página en blanco predeterminada con el código siguiente:

       AxWebBrowser1.Navigate("about:blank")
    

Consideraciones al usar el control WebBrowser junto con un programa de Microsoft Office 2007

De forma predeterminada, los programas de Office 2007 no abren documentos de Office en el explorador web. Este comportamiento también afecta al control WebBrowser. Se recomienda usar un contenedor de documentos ActiveX personalizado en lugar del control WebBrowser al desarrollar aplicaciones que abran documentos de Office 2007.

Para las aplicaciones existentes que requieren compatibilidad con versiones anteriores con el control WebBrowser, puede modificar el registro para configurar Internet Explorer. Puede usar este método para configurar Internet Explorer para abrir documentos de Office 2007 en el explorador web. Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

927009 Se abre una nueva ventana al intentar ver un documento de programa de Microsoft Office 2007 en Windows Internet Explorer 7

Nota Si modifica el registro mediante el método que se menciona en el artículo de Knowledge Base 927009, los cambios afectan al control WebBrowser que se usa en la aplicación. Los cambios también afectan a todas las instancias de Internet Explorer. Además, este método puede no funcionar para ninguna versión futura de los conjuntos de aplicaciones de Microsoft Office. Por lo tanto, se recomienda usar este método solo para la compatibilidad con una aplicación existente.

Referencias

Para obtener más información sobre cómo usar el control WebBrowser, haga clic en los números de artículo siguientes para ver los artículos de Microsoft Knowledge Base:

304562 Visual Studio 2005 y Visual Studio .NET no proporcionan un control de contenedor OLE para Windows Forms

927009 Se abre una nueva ventana al intentar ver un documento de programa de Microsoft Office 2007 en Windows Internet Explorer 7