Cómo utilizar el control WebBrowser para abrir un documento de Office

Seleccione idioma Seleccione idioma
Id. de artículo: 243058 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Cuando trabaja con documentos de Office, quizás desee mostrar estos documentos directamente en Visual Basic, pero no desee crear un objeto OLE incrustado utilizando el control de contenedor OLE. En su lugar, preferiría vincular a un documento existente y abrirlo como un objeto de Documento ActiveX en contexto. Afortunadamente, el control WebBrowser de Microsoft ofrece una solución.

En este artículo se muestra cómo ir a un documento de Office existente y mostrarlo dentro de Visual Basic utilizando el control WebBrowser.

Más información

Los documentos ActiveX son objetos OLE incrustables que se comportan más como controles ActiveX que como objetos OLE tradicionales. A diferencia de un objeto incrustado normal, un documento ActiveX no está diseñado para ser un objeto contenido en un documento mayor. En su lugar, se considera un documento completo en sí mismo que simplemente se está viendo con un visor (como Internet Explorer) o que se está almacenado en un único recurso junto con otros documentos (como un archivo del Cuaderno).

Aunque Microsoft Visual Basic no permite actualmente alojar documentos ActiveX directamente, puede eludir esta limitación utilizando las capacidades de Internet Explorer y su control WebBrowser. El control WebBrowser (Shdocvw.dll) forma parte de Internet Explorer y sólo se puede utilizar en sistemas que tengan instalado este programa.

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

Siga estos pasos para crear una aplicación de Visual Basic que abre documentos de Office:
  1. Inicie Visual Basic y cree un nuevo proyecto estándar. De forma predeterminada, se crea Form1.
  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 Internet de Microsoft. Haga clic en Aceptar para agregar los elementos al cuadro de herramientas.
  3. Agregue una instancia del control WebBrowser, el control CommonDialog y CommandButton a Form1.
  4. Después, 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
    					
  5. Presione F5 para ejecutar el proyecto. Cuando haga clic en el botón Browse, aparecerá el cuadro de diálogo Abrir y le permitirá ir a un archivo de Word, Excel o PowerPoint. Cuando elija Abrir, el documento debe abrirse dentro del control WebBrowser. Aparecerá a continuación un cuadro de mensajes que muestra el nombre de la aplicación de Office que abrió el archivo.

Consideraciones que hay que tener en cuenta al utilizar el control WebBrowser en los programas de 2007 Microsoft Office

Debe tener en cuenta lo siguiente cuando utilice el control WebBrowser:
  • El control WebBrowser va a los documentos de forma asincrónica. Esto significa que la llamada devuelve el control a la aplicación de Visual Basic antes de que el documento se haya cargado completamente. Esto ocurre cuando llama a WebBrowser1.Navigate. Si piensa automatizar el documento contenido, utilice el evento NavigateComplete2 para saber cuándo se ha terminado de cargar el documento. Utilice la propiedad Document del objeto WebBrowser para obtener la referencia al objeto de documento de Office. En el código anterior, la referencia se establece en oDocument.
  • Se producen varios problemas conocidos cuando tiene más de un control WebBrowser en un proyecto y cada control se carga con el mismo tipo de documento de Office. Es decir, cada control contiene todos los documentos de Word o todas las hojas de cálculo de Excel. Se recomienda utilizar sólo un control por cada proyecto e ir sólo a un documento cada vez.
  • Para borrar el contenido actual del control WebBrowser, utilice el código siguiente para ir a la página en blanco predeterminada en el evento Click de otro botón de comando. O bien, hágalo en otro lugar adecuado del código.
       WebBrowser1.Navigate "about:blank"
    					

Consideraciones que hay que tener en cuenta cuando utiliza el control WebBrowser en los programas de Microsoft Office 2003 y en versiones anteriores de Office

Debe tener en cuenta lo siguiente cuando utilice el control WebBrowser:
  • El control WebBrowser va a los documentos de forma asincrónica. Esto significa que cuando llama a WebBrowser1.Navigate, la llamada devuelve el control a la aplicación de Visual Basic antes de que el documento se haya cargado completamente. Si piensa automatizar el documento contenido, debe utilizar el evento NavigateComplete2 para saber cuándo se ha terminado de cargar el documento. Utilice 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, está establecido como oDocument.
  • El control WebBrowser no permite la combinación de menús. Si necesita que los elementos de menú del documento aparezcan con su menú de Visual Basic, debe utilizar en su lugar el control de contenedor OLE.
  • El control WebBrowser suele ocultar todas las barras de herramientas acopladas antes de mostrar un documento de Office. Puede utilizar Automatización para mostrar una barra de herramientas flotante utilizando código como el que se muestra a continuación:
       With oDocument.Application.CommandBars("Standard")
          .Position = 4 '[msoBarFloating]
          .Visible = True
       End With
    					
    Las versiones más recientes de Internet Explorer (5.0 y posteriores) también le permiten mostrar barras de herramientas acopladas con 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...
       WebBrowser1.ExecWB OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER
    					
  • Se conoce la existencia de algunos problemas derivados de tener más de un control WebBrowser en un proyecto y de que cada control se cargue 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 utilizar sólo un control por proyecto e ir a un documento cada vez.

    El problema más frecuente se produce 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 desea mostrar las barras de herramientas con una de las técnicas anteriores, sólo estará activo y funcionará correctamente un conjunto de barras de herramientas. El otro estará deshabilitado y no podrá utilizarse.
  • Para borrar el control WebBrowser y su contenido actual, en el evento Click de otro botón de comando (o en algún otro lugar apropiado del código), vaya a la página en blanco predeterminada utilizando el código siguiente:
       WebBrowser1.Navigate "about:blank"
    					

Referencias

Para obtener más información acerca del control WebBrowser en Visual Basic, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
162719 Cómo utilizar el control WebBrowser desde Visual Basic 5.0
188271 Cómo imprimir el contenido del control WebBrowser desde VB
191692 Shdocvw.dll no se incluye en el paquete de instalación de PDW
238313 Tener acceso al modelo de objetos de documento de Internet Explorer desde Visual Basic
927009 Se abre una nueva ventana cuando intenta ver un documento de un programa de 2007 Microsoft Office en Windows Internet Explorer 7

Propiedades

Id. de artículo: 243058 - Última revisión: martes, 22 de enero de 2008 - Versión: 6.1
La información de este artículo se refiere a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Edición empresarial
  • Microsoft Visual Basic 5.0 Enterprise Edition
Palabras clave: 
kbhowto kbexpertiseinter KB243058

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com