You are on page 1of 10

Aplicacin Visual Basic con XML Schema creado Manualmente para transferir Datos hacia/desde Excel 2003

Por: Roque Mocn Quan Tuve la necesidad de hacer un programa que transfiriera datos de/hacia Excel 2003 utilizando XML. La aplicacin funciona as: En una hoja Hoja de Excel ingresamos datos de visitas que hacemos a clientes. Luego, salvamos los datos como un archivo XML. Con una aplicacin Windows en Visual Basic leemos el archivo XML para procesarlo. Lo primero que trat de hacer es generar DataSets automticamente (Typed DataSets) a partir de un control DataAdapter. Sin embargo, me dieron error al utilizar estos DataSets como XML Maps de Excel 2003. (Al final del manual explicamos el uso de XML Maps o Asignaciones XML) Por ello cre un XML Schema manualmente, que fuera compatible con Excel.

Error que me dio en Excel, usando DataSets generados automticamente


En Excel, establezco como XML Map un archivo .XSD. Este archivo fue generado automticamente al crear un Typed DataSet en Visual Studio. Luego arrastr el XML Map hacia la hoja de Excel, adicion algunos datos, y trat de salvarlo con Save As, con Save As Type: de tipo XML Data (*.XML). All da el error: Cannot save or export XML data. The XML maps in this workbook are not exportable.

Proyecto Visual Basic para procesar archivo XML


Comenzaremos con un proyecto que leer los datos XML almacenados por el Excel. El proyecto ser tipo Visual Basic Windows Forms, y lo llamaremos WinAppXMLSchemaExcel

Dataset y XML Schema Manual


Agregamos un archivo de XML Schema (.XSD) En el Solution Explorer, sobre el nombre de nuestro proyecto, WinAppXMLSchemaExcel, damos Click Derecho y pedimos: Add Add New Item

Pedimos: XML Schema con nombre: dsVisitas.xsd. Nota: primero trat usando el template DataSet pero no funcion en Excel.

Comenzaremos arrastrando un ComplexType al area de diseo. El complex type contendr la estructura de un registro de visitas y ms tarde haremos que sea repetible, o sea, que pueda tener ms de una visita. Nombramos el ComplexType como: tipoVisita y agregaremos varias filas de elementos (El cdigo E en la 1. columna indica que es un Element): (Nota: puede dejar la 1. columna vaca, pues E de Element es el valor por default)

Luego arrastramos un Element hacia la superficie de diseo, lo nombramos Visitas, y le agregamos un E (Element) que nombramos Visita y es del tipo complejo tipoVisita. Automaticamente aparece una relacin hacia el tipo tipoVisita.

Aparece automticamente al indicar que el tipo es tipoVisitas

Para que el elemento Visita contenga cero o ms registros, asignamos a la propiedad maxOccurs el valor: unbounded (ilimitado)

Generar Typed DataSet Ya tenemos el XML Schema, y ahora queremos generar un Typed Dataset a partir de este Schema. (Queremos un Typed Dataset, pues es ms fcil de programar que el Untyped Dataset) Sobre la superficie de diseo del Schema dsVisitas.xsd oprimimos botn derecho, y pedimos la opcin Generate DataSet. Esta accin genera un archivo .vb que encapsula el DataSet o sea, un Typed DataSet. El archivo .vb est usualmente escondido, pero podemos visualizarlo en el Solution Explorer al oprimir la opcin Show All Files (Mostrar todos los archivos).

Show All Files

Typed DataSet

Formulario frmVisitas
Vamos a crear la aplicacin Visual Basic para leer y procesar el archivo de datos .XML que fuera generado en Excel. Renombr el archivo del formulario, de Form1.vb a frmVisitas.vb. Tambin renombr el formulario como tal; de Form1 a frmVisitas. (recordar que al renombrar el formulario, cuando lo corra la primera vez, le dar un error. Este error lo puede corregir dando doble click sobre el error en la lista de errores, y escogiendo el formulario inicial: frmVisitas) Dibujar los siguientes controles: un label que pregunta por el archivo a subir (lblArchivo), un text box en donde daremos la direccin del archivo (txtArchivo), un Data Grid para mostrar los datos que vamos a subir (dgVisitas) y un botn para iniciar el proceso de carga (btnCargarVisitas):

txtArchivo

lblArchivo

btnCargarVisitas

dgVisitas

DataSet de la Aplicacin Para que el DataGrid dsVisitas muestre el DataSet, arrastramos un DataSet sobre el formulario. Aparece una pantalla Add Dataset para que escoja la definicin de DataSet que queremos utilizar. En nuestro caso, escogemos: WinAppXMLSchemaExcel.dsVisitas. Esto genera un DataSet llamado Visitas1. Yo lo renombr a DsVisitas (sin el 1 al final). Para ello, dar click sobre el control DsVisitas en la parte inferior de la ventana con el formulario frmVisitas, y, en la caja de Properties cambiar su (name).

Al dejar caer DataSet sobre formulario, aparece Wizard para que escoja la definicin de DataSet deseada

Escog el DataSet que acabamos de crear: Visitas

Lo renombr de Visitas1 a dsVisitas

Binding del DataGrid Al DataGrid le hacemos binding hacia el DataSet DsVisitas, estableciendo las propiedades: DataSource: DataMember: DsVisitas Visita

Despus de dar estos valores, el Grid muestra la estructura de los datos:

Cdigo del Botn para Cargar Visitas


Este cdigo lee el archivo XML generado en Excel, y lo carga a la memoria. Damos doble-click sobre el botn btnCargarVisitas y adicionamos el siguiente cdigo: Note el mtodo ReadXML del dataset DsVisitas, el cual lee un archivo XML hacia el DataSet.
Public Class frmVisitas Inherits System.Windows.Forms.Form (Windows Form Designer generated code) Private Sub btnCargarVisitas_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnCargarVisitas.Click Me.DsVisitas.ReadXml(Me.txtArchivo.Text) End Sub End Class

Usando el XML Schema (XSD) generado con Excel


Cargamos Excel, y pedimos el men Data XML XML Source En la parte derecha de Excel aparece un Task Pane llamado: XML Source:

En el Task Pane XML Source, oprimimos el botn que dice: XML Maps Aparece la ventana de XML Maps. All pedimos Add y apuntamos hacia el archivo con el XML Schema dsVisitas.xsd que creamos previamente (en mi caso particular, el archivo se encontraba en C:\DevCare\WinAppXMLSchemaExcel). Luego oprimimos el botn de OK para aceptarlo.

Creando y Llenando Lista en Excel


Desde el mapa XML, arrastramos ns1:Visitas hacia la hoja de Excel para crear una lista (en mi caso particular, lo arratr hacia la celda A1). Y luego agregamos algunos datos a la lista resultante:

Almacenando los Datos en Excel como XML


Para almacenar slo los datos como XML, vamos al men File y pedimos Save As Pedimos en Save as Type: que lo almacene como XML Data. Al nombre de archivo, le puse: Visitas.xml

Le va a aparecer un mensaje para avisarle que slo almacena los datos, y pierde todas las otras caractersticas (como formato, etc.). Recomendara tambin almacenar la hoja como un .XLS normal, para tener una copia con los datos y formatos originales.

El archivo Visitas.xml queda as:

Corriendo el Programa Visual Basic para leer el Archivo XML


Vamos a leer el archivo Visitas.xml. Corremos la aplicacin y luego oprimimos el botn: Cargar Visitas

Por alguna razn, la Hora de Inicio y Hora de Final aparecen con formato fecha. Podemos crear un estilo para el DataGrid, para que la Hora de Inicio y Final aparezca con el formato de horas. Adems podemos modificar anchos de columna, encabezados, alineamiento, etc.

10