Cómo transferir datos XML a Microsoft Excel 2002 mediante Visual C#

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

En esta página

Resumen

Excel 2002 incluye funcionalidad para abrir archivos en el formato del Lenguaje de marcado extensible (XML). Un archivo XML que esté bien formado se puede abrir directamente en Excel 2002 o en Excel 2003, ya sea mediante código o mediante la interfaz de usuario.

Con Microsoft Visual C# 2005 o Microsoft Visual C# .NET puede aprovechar la funcionalidad XML de Excel para transferir fácilmente datos a un libro de manera que pueda presentarlos con un formato adecuado y organizados como desee. En este artículo se muestra cómo realizar esta tarea.

Generar XML desde un objeto DataSet para usarlo en Excel 2002 o en Excel 2003

Esta sección ilustra cómo crear un objeto DataSet y exportar los datos que contiene a un archivo XML utilizando el método WriteXML. El archivo XML que se genera se puede abrir directamente en Excel. Con fines ilustrativos, el objeto DataSet se crea desde la base de datos Northwind de Microsoft Access mediante el proveedor OLEDB de Jet. Sin embargo, un código similar funcionará con cualquier objeto DataSet que cree con Visual C# 2005 o con Visual C# .NET.
  1. Inicie Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET. En el menú Archivo, haga clic en Nuevo y, después, haga clic en Proyecto. Seleccione Aplicación para Windows en los tipos de proyectos de Visual C#. De forma predeterminada, se crea Form1.
  2. En el menú Ver, seleccione Cuadro de herramientas para mostrar el cuadro de herramientas y agregue un botón a Form1.
  3. Haga doble clic en Button1. Aparecerá la ventana de código del formulario.
  4. Agregue las directivas using siguientes al principio de Form1.cs:
    using System.Data.OleDb; using System.Xml;
    					
  5. Agregue la siguiente variable miembro privada a la clase Form1:
    private string strConn ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + " C:\\Archivos de programa\\Microsoft Office\\Office10\\Samples\\" + "Northwind.mdb;";
    					
    Nota
    Quizás tenga que modificar la ruta de acceso a Northwind.mdb en la cadena de conexión para adaptarla a su instalación.
  6. Agregue el código siguiente al controlador button1_Click:
    //Conectar con el origen de datos. OleDbConnection objConn = new OleDbConnection (strConn); try { objConn.Open();			
    
                //Rellenar un conjunto de datos con registros de la tabla Customers. OleDbCommand objCmd = new OleDbCommand( "Select CustomerID, CompanyName, ContactName, " + "Country, Phone from Customers", objConn); OleDbDataAdapter objAdapter = new OleDbDataAdapter(); objAdapter.SelectCommand = objCmd; DataSet objDataset = new DataSet(); objAdapter.Fill(objDataset);
    
    
                //Crear el FileStream con el que escribir. System.IO.FileStream fs = new System.IO.FileStream( "C:\\Customers.xml", System.IO.FileMode.Create);
    
                //Crear XmlTextWriter para FileStream. System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter( fs, System.Text.Encoding.Unicode);
    
                //Agregar instrucciones de procesamiento al principio del archivo XML, //una de las cuales indica una hoja de estilos. xtw.WriteProcessingInstruction("xml", "version='1.0'"); //xtw.WriteProcessingInstruction("xml-stylesheet", // "type='text/xsl' href='customers.xsl'");
    
                //Escribir los datos XML del conjunto de datos en el archivo. objDataset.WriteXml(xtw); xtw.Close();
    
                //Cerrar la conexión con la base de datos. objConn.Close(); } catch (System.Exception ex) { MessageBox.Show(ex.Message); } 
    					
    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 archivo Form1.designer.cs es donde el Diseñador de Windows Forms escribe el código que implementa todas las acciones que realizó 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/es-es/library/ms173077.aspx
  7. Presione F5 para generar y ejecutar el programa.
  8. Haga clic en Button1 para crear el archivo XML y cierre Form1 para finalizar el programa.
  9. Inicie Excel 2002 o Excel 2003 y abra el archivo resultante C:\Customers.xml.
  10. Tras observar cómo el código XML se ha analizado en filas y columnas en el nuevo libro, cierre el archivo y salga de Excel.

Dar formato al código XML con una hoja de estilos

En este paso se muestra cómo utilizar una hoja de estilos (XSL) para transformar cómo se da formato a los datos XML y se organizan en un libro de Excel.
  1. Utilice un editor HTML o un editor de textos (como Bloc de notas) y guarde la siguiente hoja de estilos como C:\Customers.xsl:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <HTML> <HEAD> <STYLE> .HDR { background-color:bisque;font-weight:bold } </STYLE> </HEAD> <BODY> <TABLE> <COLGROUP WIDTH="100" ALIGN="CENTER"></COLGROUP> <COLGROUP WIDTH="200" ALIGN="LEFT"></COLGROUP> <COLGROUP WIDTH="200" ALIGN="LEFT"></COLGROUP> <COLGROUP WIDTH="100" ALIGN="LEFT"></COLGROUP> <COLGROUP WIDTH="100" ALIGN="LEFT"></COLGROUP> <TD CLASS="HDR">Customer ID</TD> <TD CLASS="HDR">Company</TD> <TD CLASS="HDR">Contact</TD> <TD CLASS="HDR">Country</TD> <TD CLASS="HDR">Phone</TD> <xsl:for-each select="NewDataSet/Table"> <TR> <TD><xsl:value-of select="CustomerID"/></TD> <TD><xsl:value-of select="CompanyName"/></TD> <TD><xsl:value-of select="ContactName"/></TD> <TD><xsl:value-of select="Country"/></TD> <TD><xsl:value-of select="Phone"/></TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template> </xsl:stylesheet> 
    					
  2. Elimine el comentario de la siguiente línea de código en el controlador button1_Click:
    xtw.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href='customers.xsl'");
    					
    Esta línea de código escribe una instrucción de procesamiento en el archivo XML que Excel usa para encontrar la hoja de estilos (Customers.xsl).

  3. Presione F5 para generar y ejecutar el programa.
  4. Haga clic en Button1 para crear el archivo XML y cierre Form1 para finalizar el programa.
  5. Inicie Excel 2002 o Excel 2003 y abra el archivo resultante C:\Customers.xml.
  6. Puesto que Excel ve la instrucción de procesamiento para la hoja de estilos en el código XML, aparece un cuadro de diálogo al abrir el archivo. En el cuadro de diálogo Importar XML, seleccione Abrir el archivo aplicándole la siguiente hoja de estilos. En la lista, seleccione Customers.xsl y haga clic en Aceptar. Observe que los datos XML tienen formato y que las columnas se han organizado de acuerdo con la hoja de estilos.
  7. Cierre el archivo y salga de Excel.

Usar código para abrir el código XML transformado

Hasta este momento, ha abierto el archivo XML con la interfaz de usuario de Excel. En esta sección se muestra cómo automatizar Excel para abrir el libro mediante programación. En el siguiente ejemplo se muestra cómo abrir el código XML transformado sin la intervención del usuario, para lo cual se transforma primero el código XML del objeto DataSet en HTML.
  1. Agregue una referencia a Microsoft Excel 10.0 Object Library o a Microsoft Excel 11.0 Object Library. Para ello, siga estos pasos:
    1. En el menú Proyecto, haga clic en Agregar referencia.
    2. En la ficha COM, busque Microsoft Excel 10.0 Object Library o Microsoft Excel 11.0 Object Library y haga clic en Seleccionar.
    3. En el cuadro de diálogo Agregar referencias, haga clic en Aceptar para aceptar su selección. Si se le pregunta si desea generar contenedores para la biblioteca seleccionada, haga clic en .
  2. Agregue las directivas using siguientes al principio de Form1.cs:
    using Excel = Microsoft.Office.Interop.Excel;
    					
  3. En el proyecto de Visual C# 2005 o Visual C# .NET, agregue otro botón a Form1.
  4. Haga doble clic en Button2. Cuando aparezca la ventana de código del formulario, agregue el código siguiente al controlador Button2_Click:
    //Conectar con el origen de datos. OleDbConnection objConn = new OleDbConnection (strConn); objConn.Open();			
    
    //Rellenar un conjunto de datos con registros de la tabla Customers. OleDbCommand objCmd = new OleDbCommand( "Select CustomerID, CompanyName, ContactName, " + "Country, Phone from Customers", objConn); OleDbDataAdapter objAdapter = new OleDbDataAdapter(); objAdapter.SelectCommand = objCmd; DataSet objDataset = new DataSet(); objAdapter.Fill(objDataset);
    
    //Crear el FileStream con el que escribir. System.IO.FileStream fs = new System.IO.FileStream( "C:\\Customers.htm", System.IO.FileMode.Create);
    
    //Crear XmlTextWriter para FileStream. System.Xml.XmlTextWriter xtw = new System.Xml.XmlTextWriter( fs, System.Text.Encoding.Unicode);
    
    //Transformar el código XML utilizando la hoja de estilos. XmlDataDocument xmlDoc = new XmlDataDocument(objDataset); System.Xml.Xsl.XslTransform xslTran = new System.Xml.Xsl.XslTransform(); xslTran.Load("C:\\Customers.xsl"); xslTran.Transform(xmlDoc, null, xtw);
    
    //Abrir el archivo HTML en Excel. Excel.Application oExcel = new Excel.Application(); oExcel.Visible=true; oExcel.UserControl=true; Excel.Workbooks oBooks = oExcel.Workbooks; object oOpt = System.Reflection.Missing.Value; //for optional arguments oBooks.Open("c:\\customers.htm", oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt, oOpt);
    
    					
  5. Presione F5 para generar y ejecutar el programa.
  6. Haga clic en Button2 para abrir el código XML transformado en Excel.
Nota
Mientras que el Modelo de objetos de Excel 2002 o de Excel 2003 expone un método OpenXML que le permite abrir mediante programación un archivo XML con hojas de estilos aplicadas, el ejemplo anterior no llama a este método debido a un problema conocido acerca del uso de este método desde un cliente de Automatización. El método OpenXML funciona según lo esperado cuando se le llama desde una macro de Excel; sin embargo, cuando se le llama desde un cliente de Automatización, el parámetro StyleSheet no se tiene en cuenta. Para obtener información adicional al respecto, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
307230 ERROR: Se ignora el parámetro StyleSheets del método OpenXML cuando se automatiza Excel

Referencias

Para obtener más información al respecto, consulte los siguientes artículos de Microsoft Knowledge Base:
288215 INFO: Microsoft Excel 2002 y XML
302084 Cómo automatizar Microsoft Excel desde Microsoft Visual C# .NET
301216 Cómo llenar un objeto DataSet desde una base de datos mediante Visual Basic .NET
306023 Cómo transferir datos a un libro de Excel utilizando Visual C# 2005 o Visual C# .NET

Propiedades

Id. de artículo: 307029 - Última revisión: viernes, 24 de noviembre de 2006 - Versión: 7.1
La información de este artículo se refiere a:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ADO.NET 1.0
  • Microsoft Excel 2002 Standard Edition
Palabras clave: 
kbhowtomaster KB307029

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