martes, 2 de septiembre de 2014

Importando - Exportando datos en XML con Excel.

Aprenderemos cómo construir nuestro fichero XML con datos volcados en nuestra hoja de cálculo Excel.
Comenzar diciendo que XML es un Lenguaje estandarizado de Exportación e Importación de información, esto es el intercambio de datos; y su significado concreto viene del inglés: eXtensible Markup Language.
El fin principal de este lenguaje es almacenar datos en forma legible.


En el ejemplo que desarrollaré partiremos de una información contenida en una hoja de cálculo:

Importando - Exportando datos en XML con Excel.


El objetivo del día es generar en un fichero XML la información de nuestro origen, para a continuación realizar en otro Libro de Excel o base de datos de Access la importación de dichos datos...

Existen multitud de códigos VBA para Excel para generar nuestro fichero XML, y mucha información en la Web. Pero yo os propongo un método algo más sencillo: Descargarnos un complemento de Microsoft, que podemos encontrar en
http://www.microsoft.com/en-us/download/details.aspx?id=3108
Es un complemento gratuito y con la garantía Microsoft... y a pesar de estar definido para la versión 2003, sigue siendo 100% operativo en versiones superiores.


Tras instalar este complemento tendremos su propia Ficha:

Importando - Exportando datos en XML con Excel.



Con la instalación anterior, estamos en disposición de comenzar y finalizar en pocos pasos el proceso de Exportación-Importación XML.
Primer paso: Generamos el mapa XML con el complemento.
Para ello, presionamos Convert a Range in a XML List... desde el desplegable del complemento.
Esto abrirá la ventana para seleccionar dónde se encuentra el rango de datos:

Importando - Exportando datos en XML con Excel.


Tras el Ok se habrá generado el Mapa XML que podemos visualizar desde la Ficha Programador/Desarrollador > grupo XML > botón Origen:

Importando - Exportando datos en XML con Excel.



Vamos con el Segundo paso: Exportar la estructura y datos. Para esto bastará hacer clic en Ficha Programador/Desarrollador > grupo XML > botón Exportar, lo que nos abrirá una ventana del explorador para guardar donde queramos el fichero con los datos en formato XML:

Importando - Exportando datos en XML con Excel.



Si tienes curiosidad por ver qué has creado, buscar el archivo recién creado y ábrelo, por ejemplo con el Bloc de notas de Windows, esto es lo que verás:

Importando - Exportando datos en XML con Excel.



Tercer paso: Importaremos nuestros datos en XML a un segundo libro de Excel.
Para ello, tras cerrar el libro original, y abrir una nuevo, volveremos a la Ficha Programador/Desarrollador > grupo XML > botón Importar:

Importando - Exportando datos en XML con Excel.


Se abrirá una ventana del explorador, donde buscaremos el fichero .XML creado ('Excelforo_XML.xml'), tras aceptar... se nos pedirá en una última ventana dónde queremos los datos:

Importando - Exportando datos en XML con Excel.


y listo.. ya tenemos nuestros datos importados en un nuevo libro de Excel.

Igualmente funcionaría la importación en un Access, desde la ficha Datos Externos > grupo Importar y vincular > botón Importar XML:

Importando - Exportando datos en XML con Excel.


28 comentarios:

  1. Bueno dias! me gustaria compartir una duda que me ha surgido y no se como solucionar. Yo tengo mis datos importados en excel. Y como son dimensiones de un dibujo, clasificadas por elementos, siempre tengo cada elemento en un libro nuevo (por ejemplo, en un libro la dimension de los muros de la casa, en otro la dimension de las ventanas...). Yo siempre hacia una importacion y luego copiaba el libro para no repetir el proceso de importar datos desde el principio todo el rato. Pero no se que he hecho ahora que me da error. quiero decir, puedo copiar los libros y modificar los elementos que hay dentro, pero una vez que guardo y vuelvo a abrir el programa, me sale un mensaje de que hay cierta informacion que no puede ser leida/encontrada. Y resulta que los libros de datos extraidos que he copiado y pegado, han dejado de ser una extraccion para convertirse en texto normal sin ninguna referencia.
    Crees que podrias ayudarme a solucionar este problemilla?? Muchas gracias!! :)

    ResponderEliminar
    Respuestas
    1. Hola Luis,
      las conexiones de datos (construidas a partir de la importación de datos), se configuran hacia una cadena de conexión concreta y una query/consulta que extrae datos de una tabla o view del origen de datos...
      Si realizas ese duplicado del Libro, tendrás que modificar la cadena y/o query si quieres 'apuntar' a otra tabla o vista del origen.
      Lo puedes hacer desde las propiedades de la Conexión...
      Saludos

      Eliminar
  2. Hola! alguien puede decirme como solucionar un problema persistente en la exportación de datos excel a xml? Me sale este mensaje "Asignaciones XML no exportables". Gracias.

    ResponderEliminar
    Respuestas
    1. Hola,
      existen ciertos tipos de datos que no son admitidos por el código que emplea XML...
      Te recomiendo la lectura de este link de Microsoft
      https://support.office.com/es-es/article/Informaci%C3%B3n-general-sobre-XML-en-Excel-f11faa7e-63ae-4166-b3ac-c9e9752a7d80?ui=es-ES&rs=es-ES&ad=ES
      podrás analizar información relevante sobre el XML y sus asignaciones, requisitos, etc.
      Saludos

      Eliminar
  3. Hola, buenas tardes importe un archivo XML utilizando el complemento de Excel; el archivo corresponde a un CFDI (factura electrónica) y al realizar la importación, pasan casi todos los campos excepto el llamado UUID el cual corresponde al folio fiscal del comprobante, en su lugar pasa uno llamado folio fiscal original; sin embargo no contiene información.
    Saben como hacer para que baje el campo llamado UUID
    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Oscar,
      no sabría decirte, puede ser un problema de incompatibilidad en las etiquetas del fichero .xml o simplemente que Excel no admite todos los tipos de valores... pero es muy raro que sustituya un campo por otro.
      En todo caso debería importar el campo UUID sin valores o valores de error.. no cambiarlo por otro?
      Siento no poder ayudarte.
      Un saludo y suerte

      Eliminar
  4. Hola amigos. Tengo un problemita con un archivo excel que me general el XML. Recien cambie a Windows 10 y despues del cambio el archivo presento el error. El caso es que en el archivo excel tiene un campo de tipo fecha con formato DD/MM/YYYY, pero al generar el XML el campo fecha sale con un solo digito en el dia y en el mes, es decir si la fecha es 05/05/2016, el XML sale 5/5/2016. Como puedo solucionar esto. ?? Gracias de antemano.

    ResponderEliminar
    Respuestas
    1. Hola,
      no creo el fallo lo genere que el formato sea con uno o dos dígitos, es más probable esté fallando el reconocimiento completo de la fecha...
      Fíjate en el ejemplo de post, y verás que para evitar errores de fecha es mejor operar como si fueran números...
      Saludos

      Eliminar
  5. He intentado exportar a xml y me sale el error:
    No se ha definido el tipo definido por el usuario.

    Se me para en una línea que pone:
    Dim XmlDoc As msxml2.DOMDocument50

    ResponderEliminar
  6. Tengo excel 2010 con windows

    ResponderEliminar
    Respuestas
    1. Hola David,
      parece pueda ser un problema puntual de la versión.
      Prueba las alternativas indicadas en
      http://answers.microsoft.com/en-us/office/forum/office_2010-customize/cannot-create-xml-table-in-excel-2010-with-2003/bc89e78b-00e9-44ff-b7fe-d91378a4af58?auth=1
      Un saludo

      Eliminar
  7. En una celda de Excel, tengo una factura digital XML, ¿como puedo en otra celda extraer los datos específicos que están en el XML, (Total, IVA, etc.)

    ResponderEliminar
    Respuestas
    1. Hola Francisco,
      qué tal estás?, un placer saludarte igualmente.

      Tendrías que importar ese listado de datos a Excel y desde ahí, mediante vínculos o fórmulas recuperar los datos de los campos que necesites.

      Saludos

      Eliminar
  8. Hola, he estado buscando alguna manera de crear una macro que importe solo un dato de cada XML, esto es posible con VBA?

    Saludos!

    ResponderEliminar
    Respuestas
    1. Hola Javier,
      entiendo necesitas recuperar un solo registro +campo de ese XML...
      No creo posible (salvo mejor opinión) tal cosa, precisamente el XML se creó para importación/exportación masiva..
      Lo que sí podrías hacer es limpiar de datos No necesarios con o sin macros una vez importado en la hoja de cálculo.
      O bien optar por otras herramientas (quizá Power Query)

      Saludos

      Eliminar
  9. Buenos dias, podrias decirme si hay alguna forma de mapear mediante codigo, lo que quiero hacer es, tener un codigo que me mapee los datos de un archivo xml, porque me cambian el nombre de los datos y el mapeo que tenia ya no me sirve y tengo que mapear todo de nuevo, entonces lo que quiero es tener mapeado por codigo asi cambio solamente los datos que modificaron y listo, pero no se como hacerlo

    ResponderEliminar
    Respuestas
    1. Lo siento, no entendí qué necesitas

      Eliminar
    2. Hola Ismael, gracias por tu tiempo. Explico un poco mas. Estan implementando un nuevo sistema y los datos vienen en un archivo xml, el tema es que van modificando el archivo y al hacerlo el mapeo que tenia inicialmente ya no me sirve, yo lo que hice fue mapear dato por dato en las celdas que necesito la info, porque tampoco necesito todos lo datos que vienen en el archivo, que igual son muchos. Entonces lo que queria saber es si por medio de codigo puedo hacer el mapa, o sea lo que yo hago manualmente a traves de Source donde creo el mapa y asigno despues a cada dato del xml una celda en excel, queria hacerlo a traves de codigo para que sea mas falcil el mapeo cuando me modifican el archivo xml... espero que se entienda la idea. Saludos

      Eliminar
    3. Hola,
      es bastante complejo el tema, pero te dejo un link de Microsoft que te puede orientar:
      https://msdn.microsoft.com/en-us/library/office/gg469859(v=office.14).aspx

      Saludos

      Eliminar
    4. Ok Ismael muchas gracias!

      Eliminar
  10. Buenas noches, duda, como exportó una Tabla de base de datos a una carpeta o para que quede en una tabla guardada

    ResponderEliminar
  11. Respuestas
    1. Hola!
      solo sigue las indicaciones del post... así exportarás la tabla en XML

      saludos

      Eliminar
  12. Hola Ismael
    Yo tengo una serie de formulas que extraen esos datos de un xml pero yo quisiera que mi macro leyera el XML como texto y lo pegara en una sola celda. Hoy lo hago con el metodo de abrir con notepad/selecc todo/ctrl-c y luego en la celda de excel teclear "F2" y despues ctrl-v y listo. Es posible? Gracias

    ResponderEliminar
    Respuestas
    1. Hola,
      ... pero si haces esto estarás perdiendo las características del XML, no?

      Creo que lo que planteas no tiene nada que ver con XML, si solo quieres recuperar los datos de una tabla como texto puedes hacerlo accediendo directamente a esa tabla... y tendrás menos problemas

      Slds

      Eliminar
    2. Ok. no tiene nada que ver con XML. Lo que necesito es leer la informacion de ese archivo xml como texto para poder extraer datos, pero eso lo tengo que hacer cada semana para 100 o 200 xml. por eso quiero hacerlo con una macro. Mira solo necesito que me digas como abrir el archivo de datos (xml) para lectura la macro ya la tengo hecha.

      Eliminar
  13. Por cierto, seria posible almacenar esos caracteres del XML en una variable en lugar de una celda para poder usarla con las formulas de excel como extrae()?
    Gracias.

    ResponderEliminar
    Respuestas
    1. Sí, claro...
      sería posible, no habría ninguna diferencia
      Slds

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.