12.07.2015 Views

Transfiriendo datos XML a Microsoft Excel 2002 ... - Willy .Net

Transfiriendo datos XML a Microsoft Excel 2002 ... - Willy .Net

Transfiriendo datos XML a Microsoft Excel 2002 ... - Willy .Net

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Transfiriendo</strong> <strong>datos</strong> <strong>XML</strong> a <strong>Microsoft</strong> <strong>Excel</strong><strong>2002</strong> mediante Visual Basic .<strong>Net</strong>RESUMEN<strong>Excel</strong> <strong>2002</strong> incluye funcionalidad para abrir archivos en el formato Lenguaje de marcadoextensible (<strong>XML</strong>). Un archivo <strong>XML</strong> que está bien formado se puede abrir directamente en<strong>Excel</strong> <strong>2002</strong> si usa el código o la interfaz de usuario.Con Visual Basic .NET, puede aprovechar las ventajas de la funcionalidad <strong>XML</strong> de <strong>Excel</strong>para transferir fácilmente los <strong>datos</strong> a un libro de manera que pueda presentarlos con unformato adecuado y organizados como desee. Este artículo muestra cómo realizar estatarea.Generar <strong>XML</strong> desde un objeto DataSet para usarlo en <strong>Excel</strong> <strong>2002</strong>En esta sección se muestra cómo crear un objeto DataSet y exportar los <strong>datos</strong> que contienea un archivo <strong>XML</strong> mediante el método Write<strong>XML</strong>. El archivo <strong>XML</strong> que se genera se puedeabrir directamente en <strong>Excel</strong>. Con fines ilustrativos, el objeto DataSet se crea desde la basede <strong>datos</strong> Neptuno de <strong>Microsoft</strong> Access mediante el proveedor OLEDB de Jet. Sin embargo,el código funciona con cualquier objeto DataSet que cree con Visual Basic .NET.Inicie <strong>Microsoft</strong> Visual Studio .NET. En el menú Archivo, haga clic en Nuevo y, después, enProyecto. Seleccione Aplicación para Windows en los tipos de proyectos de Visual Basic.Se creará Form1 de manera predeterminada.En el menú Ver, seleccione Cuadro de herramientas para mostrar el cuadro deherramientas y agregue un botón a Form1.Haga doble clic en Button1. Aparecerá la ventana de código del formulario.Agregue la siguiente variable de miembro privada a la clase Form1:Private strConn As String = "Provider=<strong>Microsoft</strong>.Jet.OLEDB.4.0;Data Source=" & _"C:\Archivos de programa\<strong>Microsoft</strong>Office\Office10\Ejemplos\Neptuno.mdb;"NOTA: si no instaló <strong>Excel</strong> <strong>2002</strong> en la carpeta predeterminada, C:\Archivos deprograma\<strong>Microsoft</strong> Office, tiene que modificar la ruta de acceso a Nepturno.mdb en lasecuencia de conexión siguiente para que se ajuste a su instalación.


: si no instaló <strong>Excel</strong> <strong>2002</strong> en la carpeta predeterminada, C:\Archivos de programa\<strong>Microsoft</strong>Office, tiene que modificar la ruta de acceso a Nepturno.mdb en la secuencia de conexiónsiguiente para que se ajuste a su instalación. Agregue el código siguiente al controladorButton1_Click:'Conectar con el origen de <strong>datos</strong>.Dim objConn As New System.Data.OleDb.OleDbConnection(strConn)TryobjConn.Open()'Rellenar un objeto dataset con registros de la tabla Clientes.Dim strSQL As StringDim objDataset As New DataSet()Dim objAdapter As New System.Data.OleDb.OleDbDataAdapter()_strSQL = "Seleccionar Id. de cliente, Nombre de la compañía, Nombre del contacto, " &"País, Teléfono de Clientes"objAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand( _strSQL, objConn)objAdapter.Fill(objDataset)' Crear el objeto FileStream con el que escribir.Dim strFilename As StringstrFilename = "C:\Clientes.xml"Dim fs As New System.IO.FileStream(strFilename, _System.IO.FileMode.Create)'Crear un objeto XmlTextWriter para FileStream.Dim xtw As New System.Xml.XmlTextWriter(fs, _System.Text.Encoding.Unicode)


'Agregar instrucciones de procesamiento al inicio del archivo <strong>XML</strong>, una'de las cuales indica una hoja de estilos.xtw.WriteProcessingInstruction("xml", "version='1.0'")'xtw.WriteProcessingInstruction( _'"xml-stylesheet", "type='text/xsl' href='clientes.xsl'")'Escribir el código <strong>XML</strong> del objeto dataset en el archivo.objDataset.WriteXml(xtw)xtw.Close()MsgBox("Los <strong>datos</strong> del cliente se han exportado a C:\Clientes.xml.")Catch ex As ExceptionMsgBox(ex.Message)End Try: si no instaló <strong>Excel</strong> <strong>2002</strong> en la carpeta predeterminada, C:\Archivos de programa\<strong>Microsoft</strong>Office, tiene que modificar la ruta de acceso a Nepturno.mdb en la secuencia de conexiónsiguiente para que se ajuste a su instalación. Presione F5 para generar y ejecutar elprograma.: si no instaló <strong>Excel</strong> <strong>2002</strong> en la carpeta predeterminada, C:\Archivos de programa\<strong>Microsoft</strong>Office, tiene que modificar la ruta de acceso a Nepturno.mdb en la secuencia de conexiónsiguiente para que se ajuste a su instalación. Haga clic en Button1 para crear el archivo<strong>XML</strong> y, a continuación, cierre Form1 para finalizar el programa.: si no instaló <strong>Excel</strong> <strong>2002</strong> en la carpeta predeterminada, C:\Archivos de programa\<strong>Microsoft</strong>Office, tiene que modificar la ruta de acceso a Nepturno.mdb en la secuencia de conexiónsiguiente para que se ajuste a su instalación. Inicie <strong>Excel</strong> <strong>2002</strong> y abra el archivo resultanteC:\Clientes.xml.: si no instaló <strong>Excel</strong> <strong>2002</strong> en la carpeta predeterminada, C:\Archivos de programa\<strong>Microsoft</strong>Office, tiene que modificar la ruta de acceso a Nepturno.mdb en la secuencia de conexiónsiguiente para que se ajuste a su instalación. Tras observar cómo el código <strong>XML</strong> se haanalizado en filas y columnas en el nuevo libro de trabajo, cierre el archivo y salga de <strong>Excel</strong>.


Formatear el código <strong>XML</strong> con una hoja de estiloEste paso muestra cómo usar una hoja de estilo (XSL) para cambiar la manera en que los<strong>datos</strong> <strong>XML</strong> se formatean y organizan en un libro de <strong>Excel</strong>.Use un editor HTML o un editor de texto (como el Bloc de notas) y guarde la hoja de estilosiguiente como C:\Clientes.xsl:.HDR { background-color:bisque;font-weight:bold }Id. de clienteCompañíaContactoPaísTeléfono


Elimine el comentario de esta línea de código en el controlador Button1_Click:xtw.WriteProcessingInstruction( _"xml-stylesheet", "type='text/xsl' href='clientes.xsl'")Esta línea de código escribe una instrucción de procesamiento en el archivo <strong>XML</strong> que <strong>Excel</strong>usa para localizar la hoja de estilos (Clientes.xsl).Esta línea de código escribe una instrucción de procesamiento en el archivo <strong>XML</strong> que <strong>Excel</strong>usa para localizar la hoja de estilos (Clientes.xsl). Presione F5 para generar y ejecutar elprograma.Esta línea de código escribe una instrucción de procesamiento en el archivo <strong>XML</strong> que <strong>Excel</strong>usa para localizar la hoja de estilos (Clientes.xsl). Haga clic en Button1 para crear el archivo<strong>XML</strong> y, a continuación, cierre Form1 para finalizar el programa.Esta línea de código escribe una instrucción de procesamiento en el archivo <strong>XML</strong> que <strong>Excel</strong>usa para localizar la hoja de estilos (Clientes.xsl). Inicie <strong>Excel</strong> <strong>2002</strong> y abra el archivoresultante C:\Clientes.xml.Esta línea de código escribe una instrucción de procesamiento en el archivo <strong>XML</strong> que <strong>Excel</strong>usa para localizar la hoja de estilos (Clientes.xsl). Dado que <strong>Excel</strong> ve la instrucción deprocesamiento para la hoja de estilos en el código <strong>XML</strong>, aparece un cuadro de diálogo alabrir el archivo. En el cuadro de diálogo Importar <strong>XML</strong>, seleccione Abrir el archivo con lasiguiente hoja de estilos aplicada. En la lista, seleccione Clientes.xsl y haga clic enAceptar. Tenga en cuenta que los <strong>datos</strong> <strong>XML</strong> se formatean y que las columnas se organizanen función de la hoja de estilos.Esta línea de código escribe una instrucción de procesamiento en el archivo <strong>XML</strong> que <strong>Excel</strong>usa para localizar la hoja de estilos (Clientes.xsl). Cierre el archivo y salga de <strong>Excel</strong>.


Usar código para abrir el <strong>XML</strong> transformadoHasta este momento, para abrir el archivo <strong>XML</strong> ha utilizado la interfaz de usuario de <strong>Excel</strong>.Esta sección muestra cómo automatizar <strong>Excel</strong> para abrir el libro mediante programación. Elsiguiente ejemplo muestra cómo abrir el <strong>XML</strong> transformado sin la intervención del usuario,para lo cual transforma primero el <strong>XML</strong> del objeto DataSet en HTML.En el proyecto de Visual Basic .NET, agregue otro botón a Form1.Haga doble clic en Button2. Cuando aparezca la ventana de código para el formulario,agregue el código siguiente al controlador Button2_Click:'Conectar con el origen de <strong>datos</strong>.Dim objConn As New System.Data.OleDb.OleDbConnection(strConn)objConn.Open()'Rellenar un objeto dataset con registros de la tabla Clientes.Dim strSQL As StringDim objDataset As New DataSet()Dim objAdapter As New System.Data.OleDb.OleDbDataAdapter()_strSQL = "Seleccionar Id. de cliente, Nombre de la compañía, Nombre del contacto, " &"País, Teléfono de Clientes"objAdapter.SelectCommand = New System.Data.OleDb.OleDbCommand( _strSQL, objConn)objAdapter.Fill(objDataset)' Crear el objeto FileStream con el que escribir.Dim strFilename As StringstrFilename = "C:\Clientes.htm"Dim fs As New System.IO.FileStream(strFilename, _System.IO.FileMode.Create)'Crear un objeto XmlTextWriter para FileStream.


Dim xtw As New System.Xml.XmlTextWriter(fs, _System.Text.Encoding.Unicode)'Transformar el <strong>XML</strong> con la hoja de estilos.Dim xmlDoc As System.Xml.XmlDataDocument = _New System.Xml.XmlDataDocument(objDataset)Dim xslTran As System.Xml.xsl.XslTransform = _New System.Xml.Xsl.XslTransform()xslTran.Load("c:\clientes.xsl")xslTran.Transform(xmlDoc, Nothing, xtw)'Escribir el <strong>XML</strong> transformado en el archivo.objDataset.WriteXml(xtw)xtw.Close()'Iniciar <strong>Excel</strong> y abrir el archivo resultante.Dim o<strong>Excel</strong> As Objecto<strong>Excel</strong> = CreateObject("<strong>Excel</strong>.Application")o<strong>Excel</strong>.Workbooks.Open("C:\Clientes.htm")'Hacer que <strong>Excel</strong> esté visible y dar al usuario el control de la aplicación.o<strong>Excel</strong>.Visible = Trueo<strong>Excel</strong>.UserControl = TruePresione F5 para generar y ejecutar el programa.Haga clic en Button2 para abrir el <strong>XML</strong> transformado en <strong>Microsoft</strong> <strong>Excel</strong>.NOTA: mientras que el Modelo de objetos de <strong>Excel</strong> <strong>2002</strong> expone un método Open<strong>XML</strong> quele permite abrir mediante programación un archivo <strong>XML</strong> con hojas de estilos aplicadas, elejemplo anterior no llama a este método debido a un problema conocido acerca del uso deeste método desde un cliente de Automatización. El método Open<strong>XML</strong> funciona según loesperado cuando se le llama desde una macro de <strong>Excel</strong>; sin embargo, cuando este método


se llama desde un cliente de Automatización, el parámetro StyleSheet no se tiene en cuenta.Para obtener información adicional, haga clic en el número de artículo siguiente para verloen <strong>Microsoft</strong> Knowledge Base:307230 ERROR: StyleSheets Parameter of the Open<strong>XML</strong> Method Ignored When Automating<strong>Excel</strong> <strong>2002</strong>Publicado Originalmente en <strong>Microsoft</strong> KB

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!