XML a CSV

Cómo convertir un CSV a XML desde Excel: dos métodos sencillos

octubre 17, 2026 Tuto Excel 15 min read
Cómo convertir un CSV a XML desde Excel: dos métodos sencillos

Pasar un CSV a XML bien formado desde Excel no tiene un botón mágico: Excel abre el archivo de texto y lo guarda, pero entiende CSV y XML como formatos separados. La hoja que vas a usar en el tutorial contiene una lista de clientes (id, nombre, email, ciudad y fecha de alta) que recorreremos hasta dejarla como un archivo .xml válido. Cuando termines, sabrás hacerlo con Power Query (el camino más cómodo en Excel 2016, 2021, 2024 y Microsoft 365), con una macro VBA cuando necesites control fino sobre las etiquetas, y con un script de Python como plan B.

Por qué Excel no convierte un CSV en XML con un solo clic

Cuando haces doble clic sobre un archivo .csv, Excel lo abre y lo muestra en columnas. Lo que no hace es entender que quieres un XML al final: lo que tienes en pantalla es una hoja con los valores del CSV, no un archivo estructurado. Si vas a Archivo > Guardar como, el menú ofrece .xlsx, .xlsm, .csv, .txt y, en algunas versiones, tipos como PDF o libro de Excel 97-2003, pero no aparece la opción "XML".

La razón es que XML necesita una estructura que el CSV no declara: un elemento raíz que envuelva a los demás, una etiqueta que se repita por cada fila y un esquema que diga qué columnas son atributos y cuáles son elementos hijos. Esa información no está en un archivo plano separado por comas, así que alguien tiene que decidirla. Power Query puede hacerlo por ti si le indicas el nombre raíz y el de cada fila, y VBA o Python te lo dejan escribir a mano cuando necesitas una estructura concreta.

Nota: en Excel para la web no existe la exportación a XML desde Power Query ni el editor de VBA, así que el tutorial se centra en Excel de escritorio.

El CSV bien preparado antes de tocar Excel

Antes de abrir nada, conviene revisar tres cosas del archivo de origen. La primera, que todas las filas tengan la misma cantidad de columnas: si una línea tiene cinco campos y la siguiente seis, Power Query va a descolocar los datos y el XML saldrá con etiquetas mal anidadas. La segunda, que ningún valor contenga el carácter que se usa como separador: si el delimitador es la coma, ningún campo puede llevarla dentro (los nombres de empresa con ", S.A." son un caso típico). La solución es envolver esos valores entre comillas dobles en el CSV o cambiar el delimitador a tabulador antes de importar.

La tercera, que la primera fila contenga los nombres de las cabeceras: id, nombre, email, ciudad, fecha_alta. Esos nombres pasarán a ser las etiquetas XML de cada elemento, así que mejor que sean válidos (sin espacios, sin tildes, sin caracteres raros) y descriptivos. Si el CSV viene sin cabeceras, Power Query las llama Column1, Column2… y luego hay que renombrarlas a mano.

Consejo: guarda el archivo original como UTF-8 antes de importarlo. Si lo abriste y lo guardaste con el Bloc de notas de Windows, elige "Guardar como" y codificación "UTF-8 (sin BOM)" para evitar problemas con la ñ y las tildes.

Exportar el CSV desde Excel con Guardar como y sus límites

Archivo > Guardar como > CSV (separado por comas) (*.csv) deja el archivo de texto en UTF-8 y solo guarda los valores de la hoja activa: nada de formatos, nada de fórmulas (solo el resultado), nada de las demás hojas del libro, y nada de gráficos, tablas dinámicas ni macros. Es el camino correcto para devolver un CSV desde Excel, pero no es todavía un XML: lo que obtienes es un archivo de texto plano, no un documento con etiquetas.

De hecho, al elegir CSV en Guardar como, Excel te avisa con un cuadro de diálogo: "Puede que algunas características de su libro se pierdan si lo guarda con el formato elegido". Eso confirma que Guardar como no convierte a XML, solo cambia el contenedor. Para llegar al XML necesitas Power Query, VBA o un script aparte.

Cuidado: Guardar como CSV desde un libro con varias hojas no pregunta nada: solo exporta la hoja activa. Si quieres conservar las demás, cópialas a libros separados antes o usa otra estrategia.

Construir el XML desde Excel con Power Query

Power Query es la herramienta de Power Query integrada en Excel desde la versión 2016, y la que mejor se lleva con el formato XML. El flujo es: cargar el CSV, decidir qué columna hace de raíz y cuál se repite por cada fila, y exportar la consulta como archivo .xml. Funciona en Excel 2016, 2019, 2021, 2024 y Microsoft 365.

Cargar el CSV con la cinta de Power Query

Ve a la cinta y elige la ruta de importación. La primera vez, Excel te enseña una vista previa para confirmar el delimitador y la codificación antes de cargar.

DatosObtener y transformar datosDesde texto/CSV

En el cuadro de diálogo que se abre, selecciona el archivo clientes.csv y pulsa Importar. Aparece la vista previa de Power Query con tres datos clave arriba: origen del archivo, delimitador y tipo de detección. Cambia el delimitador a Coma si tu CSV usa comas, o a Punto y coma si usa ;. En "Origen del archivo" elige 65001: Unicode (UTF-8) para que las tildes y la ñ lleguen bien. Cuando la vista previa muestre las cinco columnas separadas, pulsa Transformar datos.

Dar nombre al elemento raíz y a cada fila en Power Query

Una vez en el editor de Power Query, en el panel de la derecha tienes la lista de pasos aplicados. Lo que vas a hacer aquí es asegurar que las cinco columnas tengan los tipos correctos (texto, texto, texto, texto, fecha) y luego cerrar y cargar la consulta en una tabla de Excel. El nombre del elemento raíz y el de cada fila se configuran al exportar, no en este paso: en el editor, lo que importa es que los datos estén limpios.

Consejo: revisa la columna fecha_alta y asegúrate de que Power Query la ha reconocido como fecha. Si la ha dejado como texto, haz clic en el icono del tipo de dato (esquina izquierda de la cabecera) y elige Fecha.
A1fx**id**
A B B D E
1 id nombre email ciudad fecha_alta
2 1 Ana Ruiz ana.ruiz@example.com Madrid 12/03/2025
3 2 Pedro Gómez pedro.gomez@example.com Buenos Aires 04/07/2024
4 3 Lucía Fernández lucia.fernandez@example.com Lima 19/11/2025
5 4 Jorge Salinas jorge.salinas@example.com Santiago 02/01/2026
Clientes
Comprueba: la tabla tiene cinco columnas, las cabeceras están en la fila 1 y la columna fecha_alta muestra fechas reales, no el texto 12/03/2025 entre comillas.

Exportar la consulta como archivo XML desde Power Query

Con la consulta ya cargada en la hoja, ve a la cinta y elige la opción de exportación.

ArchivoExportarCambiar tipo de archivoXML

Excel te pide la carpeta de destino y el nombre del archivo. Al confirmar, genera un .xml con la estructura que Power Query decide por defecto: un elemento raíz <Table> y un elemento <Row> por cada fila, con cada columna como elemento hijo. Para personalizar los nombres hay que tocar el código M de la consulta (en la ficha Inicio > Consulta > Editor avanzado), pero para muchos usos el resultado por defecto ya sirve.

Para verificarlo, abre el archivo .xml con el bloc de notas: la primera línea debe ser <?xml version="1.0" encoding="UTF-8" standalone="yes"?> y, debajo, las etiquetas correctamente abiertas y cerradas. Si lo abres con el navegador (arrastrando el archivo a Chrome o Firefox), debe mostrar el árbol sin mensajes de error.

Cuidado: si los datos contienen los caracteres &, <, > o comillas, Power Query los escapa automáticamente al escribir el XML, pero si editas el archivo a mano y los quitas, el XML deja de ser válido.

Generar el XML desde Excel con VBA cuando Power Query no basta

Power Query cubre la mayoría de los casos, pero hay situaciones en las que necesitas decidir tú cada etiqueta: que id sea un atributo y no un elemento, que la raíz se llame clientes y no Table, o que el XML use un esquema (XSD) concreto. En esos casos, una macro VBA te da el control fino que Power Query no expone.

Activar la pestaña Programador y preparar el editor de VBA

La pestaña Programador viene oculta por defecto. Para mostrarla, ve a Archivo > Opciones > Personalizar cinta de opciones y marca la casilla Programador en la columna derecha. Acepta y ya tienes la pestaña en la cinta. Pulsa Alt+F11 para abrir el editor de Visual Basic.

ArchivoOpcionesPersonalizar cinta de opcionesProgramador [x]

La macro que lee el CSV y escribe el XML bien formado

En el editor de VBA, inserta un módulo (Insertar > Módulo) y pega la siguiente macro. Lee el archivo clientes.csv que esté en la misma carpeta que el libro, lo recorre fila a fila y escribe clientes.xml junto al libro, con la raíz <clientes> y un elemento <cliente> por cada fila, donde id es atributo y el resto son elementos hijos.

Sub CSVAXml()
    Dim csvPath As String, xmlPath As String
    Dim wbCSV As Workbook, ws As Worksheet
    Dim i As Long, ultimaFila As Long
    Dim xmlDoc As Object, root As Object, cliente As Object
    Dim nodo As Object

    csvPath = ThisWorkbook.Path & Application.PathSeparator & "clientes.csv"
    xmlPath = ThisWorkbook.Path & Application.PathSeparator & "clientes.xml"

    Set wbCSV = Workbooks.Open(csvPath, Local:=True)
    Set ws = wbCSV.Sheets(1)
    ultimaFila = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    Set xmlDoc = CreateObject("MSXML2.DOMDocument")
    xmlDoc.appendChild xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
    Set root = xmlDoc.createElement("clientes")
    xmlDoc.appendChild root

    For i = 2 To ultimaFila
        Set cliente = xmlDoc.createElement("cliente")
        cliente.setAttribute "id", CStr(ws.Cells(i, 1).Value)
        Set nodo = xmlDoc.createElement("nombre")
        nodo.Text = CStr(ws.Cells(i, 2).Value)
        cliente.appendChild nodo
        Set nodo = xmlDoc.createElement("email")
        nodo.Text = CStr(ws.Cells(i, 3).Value)
        cliente.appendChild nodo
        Set nodo = xmlDoc.createElement("ciudad")
        nodo.Text = CStr(ws.Cells(i, 4).Value)
        cliente.appendChild nodo
        Set nodo = xmlDoc.createElement("fecha_alta")
        nodo.Text = Format(ws.Cells(i, 5).Value, "yyyy-mm-dd")
        cliente.appendChild nodo
        root.appendChild cliente
    Next i

    wbCSV.Close SaveChanges:=False
    xmlDoc.Save xmlPath
    MsgBox "Archivo XML creado en: " & xmlPath
End Sub

Al ejecutar la macro (F5 desde el editor o Alt+F8 desde Excel), el mensaje confirma que el archivo se ha escrito. Lo abres con el navegador para verificar que el XML está bien formado.

Archivo XML creado en: C:\Users\usuario\Documentos\clientes.xml
A
1 <?xml version="1.0" encoding="UTF-8"?>
2 <clientes>
3 <cliente id="1">
4 <nombre>Ana Ruiz</nombre>
5 <email>ana.ruiz@example.com</email>
6 <ciudad>Madrid</ciudad>
7 <fecha_alta>2025-03-12</fecha_alta>
8 </cliente>
9 <cliente id="2">
10 <nombre>Pedro Gómez</nombre>
11 <email>pedro.gomez@example.com</email>
12 <ciudad>Buenos Aires</ciudad>
13 <fecha_alta>2024-07-04</fecha_alta>
14 </cliente>
15 </clientes>
clientes.xml (vista en navegador)
Cuidado: Workbooks.Open con un CSV usa la configuración regional para decidir el delimitador. Si tu separador es ;, pásalo en el argumento: Workbooks.Open csvPath, Local:=True, Format:=4. El número 4 fuerza el delimitador por defecto de tu sistema.

El script en Python como salida cuando VBA se queda corto

Cuando el XML debe seguir un esquema muy concreto o quieres reutilizar el script desde la línea de comandos, Python con su librería estándar xml.etree.ElementTree es suficiente. No necesitas instalar nada.

import csv
import xml.etree.ElementTree as ET

ruta_csv = "clientes.csv"
ruta_xml = "clientes.xml"

with open(ruta_csv, encoding="utf-8") as f:
    lector = csv.DictReader(f)
    raiz = ET.Element("clientes")
    for fila in lector:
        cliente = ET.SubElement(raiz, "cliente", id=fila["id"])
        ET.SubElement(cliente, "nombre").text = fila["nombre"]
        ET.SubElement(cliente, "email").text = fila["email"]
        ET.SubElement(cliente, "ciudad").text = fila["ciudad"]
        ET.SubElement(cliente, "fecha_alta").text = fila["fecha_alta"]

arbol = ET.ElementTree(raiz)
ET.indent(arbol, space="  ")
arbol.write(ruta_xml, encoding="utf-8", xml_declaration=True)
print("Archivo XML creado en:", ruta_xml)

Se ejecuta desde la carpeta donde está el CSV con python convertir.py y produce el mismo XML que la macro VBA, con la ventaja de que el script se puede programar en el Programador de tareas o llamar desde otra aplicación.

Cuando no necesitas abrir Excel en absoluto

Si tu CSV ya está limpio y bien codificado, Excel solo aporta una hoja intermedia que no necesitas: el script de Python lee el .csv directamente y produce el .xml sin pasar por ningún .xlsx. Lo mismo vale para los conversores en línea, que reciben el archivo de texto y devuelven el XML; revisa su política de privacidad antes de subir datos de clientes.

Comprueba: el script ha creado clientes.xml en la misma carpeta que el CSV. Ábrelo con el navegador y confirma que el árbol aparece sin mensajes de error y que la primera línea es la declaración XML.

Errores típicos al pasar de CSV a XML desde Excel

El CSV se abre todo en una columna

Lo que ves: la primera fila tiene 1,Ana Ruiz,ana.ruiz@example.com,Madrid,2025-03-12 metido todo en la celda A1 y las siguientes filas están vacías. La causa es que el separador del CSV (coma) no coincide con el de tu configuración regional (punto y coma). El arreglo es importar por la cinta y elegir el delimitador a mano en la vista previa de Power Query, en lugar de hacer doble clic sobre el archivo.

Las tildes y la ñ salen rotas en el XML

Lo que ves: al abrir el XML con el navegador, los nombres aparecen como Ana Ruíz o Lucía. La causa es que el CSV no está guardado como UTF-8, así que el Bloc de notas o el programa que lo generó usó otra codificación (Windows-1252 o ISO-8859-1). El arreglo es recodificar el original a UTF-8 sin BOM, o importar el CSV eligiendo 65001: Unicode (UTF-8) en la vista previa de Power Query, que es lo que recomienda Microsoft en la ayuda oficial para importar texto y CSV.

El archivo exportado no es un XML válido

Lo que ves: al abrirlo en el navegador, sale un mensaje de error tipo "XML mal formado" o "Etiquetas no cerradas". La causa suele ser que una columna del CSV contenía &, <, > o " y el programa que generó el XML no los escapó como &amp;, &lt;, &gt; o &quot;. El arreglo es revisar la columna sospechosa en el CSV, envolver los valores entre comillas dobles, y volver a generar el XML con Power Query o con la macro VBA, que escapan automáticamente.

XMLFILTRO devuelve #¿NOMBRE? al pegar el XML en una celda

Lo que ves: la fórmula =XMLFILTRO("<cliente><nombre>Ana</nombre></cliente>"; "//nombre") devuelve el error #¿NOMBRE? y la celda muestra el nombre del error en lugar de Ana. La causa es que XMLFILTRO está disponible desde Excel 2013, pero solo sirve para leer XML dentro de una fórmula, no para crearlo. Para generar un XML hace falta Power Query o código, no esta función. Si tu versión no la trae, la fórmula fallará con #¿NOMBRE? y la solución es FILTERXML (XMLFILTRO) en la ayuda oficial para entender qué hace y usar el camino de la exportación.

Cuidado: Excel para la web no incluye la función XMLFILTRO, así que devuelve #¿NOMBRE? aunque pegues el XML bien escrito. En la web, la exportación a XML hay que hacerla desde otra herramienta.

Lo que ya sabes hacer con un CSV y Excel para llegar a XML

  • Cargar el CSV con Power Query eligiendo UTF-8 y el delimitador correcto en la vista previa.
  • Generar el XML con la exportación de Power Query o con una macro VBA que usa MSXML2.DOMDocument para tener control fino sobre las etiquetas.
  • Validar el .xml abriéndolo con el navegador antes de enviarlo a otro sistema.
  • Si quieres un script reutilizable, el de Python con xml.etree.ElementTree produce el mismo XML sin abrir Excel.

El siguiente paso es definir la estructura XML exacta que necesita el sistema que va a consumir el archivo: si espera id como atributo o como elemento, si las fechas van en formato yyyy-mm-dd o en otro, y si las ciudades vacías deben aparecer o no. Con eso claro, cualquiera de los tres caminos que has visto produce el XML que necesitas.

Dudas al convertir un CSV a XML desde Excel

1. ¿Cómo pasar un archivo CSV a XML desde Excel?

Abre el CSV en Excel, ve a Archivo > Guardar como y elige el tipo «Datos XML (*.xml)». Si la estructura no está definida, Excel te pedirá crear un esquema primero: en Desarrollador > Origen podrás mapear las columnas a etiquetas XML y luego guardar el archivo resultante con la extensión .xml.

2. ¿Cómo convertir un CSV a XLSX?

Basta con abrir el CSV con doble clic y, sin tocar nada, ir a Archivo > Guardar como > Libro de Excel (*.xlsx). Si te interesa conservar la configuración regional (separadores, codificación), usa la opción «Desde texto» en Datos > Obtener datos para importar el CSV y luego guárdalo como .xlsx.

3. ¿Cómo pasar un XML a CSV?

En Excel, abre el XML con Archivo > Abrir y, si tiene un esquema, Acepta. Luego ve a Archivo > Guardar como y elige «CSV (separado por comas) (*.csv)». Si el XML es complejo o tiene varios niveles, conviértelo primero a una tabla con Power Query (Datos > Obtener datos > Desde archivo XML) y exporta el resultado a CSV.

Fuentes

  1. MicrosoftExcel or CSV file to XML – ADF – Microsoft Q&Aconsultado el 06/10/2026
  2. MicrosoftCONVERTIR — documentación oficialconsultado el 06/10/2026
  3. MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 06/10/2026
  4. MicrosoftDe Word a Excel — documentación oficialconsultado el 06/10/2026
  5. MicrosoftXMLFILTRO — documentación oficialconsultado el 06/10/2026