Cómo utilizar el control WebBrowser para abrir un documento de Office en Visual C# 2005 o en Visual C# .NET

Seleccione idioma Seleccione idioma
Id. de artículo: 304662 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E304662
Para obtener una versión de este artículo para Microsoft Visual Basic .NET, vea 304643.
Expandir todo | Contraer todo

En esta página

Resumen

Puede que desee mostrar o incrustar directamente un documento de Microsoft Office en un formulario de Microsoft Visual C#. Microsoft Visual C# 2005 y Microsoft Visual C# .NET no proporcionan un control OLE que permita incrustar un documento de Office en un formulario. Si desea incrustar un documento existente y abrirlo como un objeto de documento ActiveX en contexto dentro de un formulario de Visual C#, una posible solución consiste en utilizar el control WebBrowser de Microsoft.

En este artículo se demuestra cómo buscar un documento de Office existente y mostrarlo dentro de un formulario de Visual C# con 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 tradicional incrustable, un documento ActiveX no está diseñado para ser un objeto contenido en un documento mayor. En cambio, se considera como un documento completo que simplemente se está mostrando (como ocurre con Microsoft Internet Explorer) o que está almacenado en un único recurso junto con otros documentos (como un archivo del Cuaderno de Microsoft Office). Un documento ActiveX alojado en el control WebBrowser siempre está activo; por tanto, a diferencia de los objetos OLE incrustados tradicionales, no hay necesidad de realizar la activación en contexto.

Aunque Visual C# 2005 y Visual C# .NET no permiten alojar documentos ActiveX directamente, puede utilizar el control WebBrowser para este propósito. 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 C# .NET que abra documentos de Office

Para crear una aplicación de Visual C# que abra documentos de Office, siga estos pasos:
  1. Cree un nuevo proyecto de aplicación para Windows en Visual C# 2005 o en Visual C# .NET. De manera predeterminada se creará Form1.
  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 ficha 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 aparecerá con el texto Explorador en el cuadro de herramientas.

    Nota: en Visual Studio 2005 no tiene que realizar el paso 2.
  3. Con el cuadro de herramientas, agregue un control WebBrowser, un control OpenFileDialog y un control CommandButton a Form1. De esta forma se agregan las variables miembro AxWebBrowser1, OpenFileDialog1 y Button1 a la clase Form1.
  4. En Form1, haga doble clic en Button1. De esta forma se agrega el evento Button1_Click a Form1.
  5. En la ventana de código de Form1, agregue el espacio de nombres siguiente a la lista:
     using System.Reflection; 
  6. Defina un miembro privado en la clase Form1 como se indica a continuación:
    private Object oDocument; 
  7. Al final del método InitializeComponent de la clase Form1, agregue el código siguiente para controlar los eventos Form1_Load, Form1_Closed y axWebBrowser1_NavigateComplete2:
    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed) 
  8. Reemplace el siguiente código
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    por:
    private void button1_Click(object sender, System.EventArgs e)
    {
    
     String  strFileName;
    
     //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    	        
     //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
     //Note: You can use the reference to the document object to 
     //      automate the document server.
    
     Object o = e.pDisp;
       
     oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    			
     Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
     Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
     MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    
    Nota: debe cambiar el código en Visual Studio 2005. De forma predeterminada, Visual C# agrega un formulario al proyecto cuando se crea un proyecto de Windows Forms. El formulario se denomina Form1. Los dos archivos que lo representan se denominan Form1.cs y Form1.designer.cs. Escribe el código en Form1.cs. El Diseñador de Windows Forms escribe en el archivo Form1.designer.cs el código que implementa todas las acciones que se realizan arrastrando y colocando controles desde el cuadro de herramientas.

    Para obtener más información acerca del Diseñador de Windows Forms en Visual C# 2005, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
  9. Presione la tecla F5 para ejecutar el proyecto. Al hacer clic en Examinar, el cuadro de diálogo Abrir aparece y le permite examinar un documento de Word, una hoja de cálculo de Excel o una presentación de Powerpoint. Seleccione cualquier archivo y haga clic en Abrir. El documento se abrirá dentro del control WebBrowser y aparecerá un cuadro de mensajes que muestra el servidor del documento de Office.

Consideraciones al utilizar el control WebBrowser

Debería considerar lo siguiente al utilizar el control WebBrowser:
  • El control WebBrowser examina los documentos de forma asincrónica. Cuando llama a WebBrowser1.Navigate, la llamada devuelve el control a la aplicación de Visual C# antes de que el documento se haya cargado completamente. Si piensa utilizar la Automatización en el documento contenido, tendrá que utilizar el evento NavigateComplete2 para que se le informe cuando se ha terminado de cargar el documento. Utilice la propiedad Document del objeto WebBrowser que se pasa para obtener una referencia del 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.
  • En Internet Explorer versiones 5.0 y posteriores, puede 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.
     
     Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    
  • Se conoce la existencia de algunos problemas derivados de tener más de un control WebBrowser en un proyecto y de tener cada control cargado con el mismo tipo de documento de Office (por ejemplo, documentos de Word u hojas de cálculo de Excel) Microsoft recomienda utilizar sólo un control por cada proyecto y buscar sólo un documento cada vez.

    El problema más común se produce con las barras de comandos de Microsoft 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 se podrá utilizar.
  • Para borrar el contenido actual de WebBrowser, en el evento Click de otro botón de comando (o en algún otro lugar apropiado del código), busque la página en blanco predeterminada con el siguiente código:
     AxWebBrowser1.Navigate("about:blank"); 

Referencias

Para obtener información adicional acerca de cómo usar el control WebBrowser, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
304562 INFO: Visual Studio .NET no proporciona un control contenedor OLE para Windows Forms
243058 Cómo utilizar el control WebBrowser para abrir un documento de Office
162719 Cómo utilizar el control WebBrowser desde Visual Basic 5.0
202476 ERROR: No se puede editar un documento de Word en un control WebBrowser u OLE
188271 Cómo imprimir el contenido del control WebBrowser desde Visual Basic
191692 PRB: Shdocvw.dll no se incluye en el paquete de instalación de PDW
238313 PRB: Acceso al Modelo de objetos de documento de Internet Explorer desde Visual Basic

Propiedades

Id. de artículo: 304662 - Última revisión: lunes, 23 de octubre de 2006 - Versión: 7.1
La información de este artículo se refiere a:
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
Palabras clave: 
kbactivedocs kbautomation kbhowto kbwebbrowser KB304662

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