Skip to content
Back to Blog
how-to-convert

Cómo convertir de XLSX a CSV (y evitar los dolores de cabeza de la codificación)

2026-05-17 8 min read

Por qué fallan las conversiones de XLSX a CSV

Parecen tan similares. XLSX y CSV son ambos tablas de datos, ¿verdad? Pero por debajo, son dos mundos completamente distintos. Un archivo XLSX es un paquete complejo: un archivo zip de documentos XML que contiene múltiples hojas, formato de celdas enriquecido, fórmulas e incluso imágenes. Un CSV es solo texto. Las filas terminan con un salto de línea y las columnas se separan por un carácter, como una coma. Cuando aplanas esa rica estructura XLSX en texto plano, estás buscando problemas. Los mayores dolores de cabeza vienen de los desajustes de codificación. Si tu hoja de cálculo contiene caracteres especiales —letras acentuadas como é o ñ, símbolos de moneda como €, o texto no latino— el CSV resultante debe usar sí o sí la codificación de caracteres correcta, que es casi siempre UTF-8. Muchas herramientas usan por defecto codificaciones antiguas como Windows-1252, que destrozará esos caracteres y los convertirá en signos de interrogación. Un nombre de cliente como 'José García' se convierte en 'Jos? Garc?a', y la importación a tu CRM fallará estrepitosamente. Los conflictos con los delimitadores son otro problema clásico. Si tu CSV usa comas para separar columnas, ¿qué pasa con una celda que contiene una coma, como en la dirección 'Calle del Roble, 14, Suite 200'? Un generador de CSV bien diseñado envuelve ese valor entre comillas dobles. Pero si los propios datos contienen comillas dobles, estas deben escaparse duplicándolas ('Él dijo "hola"' se convierte en '"Él dijo ""hola"""'). Saber dónde están enterradas estas minas antes de empezar a convertir te ahorrará horas de depuración dolorosa.

La decisión de la codificación: UTF-8, UTF-8 con BOM o alguna otra cosa

Antes de convertir nada, toma una decisión crucial: ¿qué codificación necesita tu sistema de destino? Si aciertas con esto, te evitarás la gran mayoría de los problemas de conversión. Para casi cualquier sistema moderno, la respuesta es UTF-8. Y punto. Bases de datos, scripts de Python, APIs web... todos esperan y manejan UTF-8 perfectamente. Si vas a pasar el CSV a pandas con `pd.read_csv()`, UTF-8 es la opción por defecto y simplemente funciona. Lo mismo ocurre con el comando `COPY` de PostgreSQL o `LOAD DATA INFILE` de MySQL cuando especificas `CHARACTER SET utf8mb4`. Luego está el UTF-8 con BOM (Byte Order Mark). Esta variante añade tres bytes invisibles (0xEF, 0xBB, 0xBF) al principio del archivo. ¿Por qué existe? Para ayudar a Microsoft Excel. En Windows, Excel a menudo asume que un CSV está codificado con Windows-1252 a menos que vea este BOM, corrompiendo cualquier carácter especial. Así que aquí va la regla de oro: si un humano va a abrir el CSV directamente en Excel, usa UTF-8 con BOM. Si lo va a leer un script o un programa, usa UTF-8 normal, porque ese BOM puede atascar a muchos analizadores (parsers). Las codificaciones más antiguas como Windows-1252 (o ANSI) e ISO-8859-1 (Latin-1) son reliquias. Solo admiten caracteres de Europa Occidental y corromperán cualquier dato de otros idiomas. Puede que te los encuentres en sistemas heredados, pero nunca deberías elegirlos para un nuevo flujo de trabajo. El [conversor de XLSX a CSV](/convert/xlsx-to-csv) de CocoConvert te permite elegir la codificación desde el principio, una característica crítica que muchas herramientas gratuitas omiten inexplicablemente. Simplemente elige UTF-8 para sistemas y UTF-8 con BOM para Excel.

Paso a paso: Convertir de XLSX a CSV con CocoConvert

El proceso es sencillo, pero el diablo está en los detalles. Unos pocos ajustes aquí serán decisivos para el resultado final. 1. Ve a la [página de XLSX a CSV de CocoConvert](/convert/xlsx-to-csv) y sube tu archivo. Puedes procesar archivos de hasta 50 MB sin una cuenta, y los archivos más grandes solo requieren un registro gratuito. Si tu XLSX es un verdadero monstruo —algunas exportaciones empresariales pueden pesar cientos de megabytes— necesitarás usar una herramienta de escritorio como LibreOffice Calc o un script, que cubrimos más adelante. 2. Selecciona la hoja que quieres exportar. Un archivo XLSX puede contener muchas hojas, pero un CSV solo puede representar una. CocoConvert lista todas las hojas de tu archivo en un menú desplegable. Si necesitas exportar todas las hojas, tienes que convertirlas una por una. 3. Elige tu delimitador. La coma es el estándar, pero es una elección terrible si tus datos están llenos de ellas (piensa en descripciones de texto libre o direcciones). En Europa, el punto y coma es una alternativa común y a menudo más segura. La separación por tabuladores (TSV) es otra gran opción si tu texto contiene tanto comas como puntos y comas. 4. Establece la codificación. Ya te sabes la lección: UTF-8 para uso programático, UTF-8 con BOM si el archivo está destinado a que alguien lo abra en Excel. 5. Decide cómo manejar las fórmulas. CocoConvert exporta el *valor* calculado de una celda, no la fórmula en sí. Una celda con `=SUMA(A1:A10)` que muestra `4500` se convertirá en `4500` en el CSV. Esto es exactamente lo que quieres el 99% de las veces. Si de verdad necesitas el texto de la fórmula, para empezar no deberías estar convirtiendo a CSV. 6. Descarga y verifica. **No abras el CSV en Excel para comprobarlo.** Confía en mí. Ábrelo primero en un editor de texto de verdad, como Notepad++ en Windows o BBEdit en Mac. Estas herramientas te muestran el texto en crudo y te permiten confirmar que la codificación es correcta. Busca una fila con caracteres especiales y asegúrate de que se ven bien antes siquiera de pensar en importarlo a tu sistema de destino.

Hacerlo en Excel y LibreOffice (cuando necesitas control local)

A veces tienes que convertir localmente. Quizás el archivo contiene datos sensibles que no se pueden subir a la red, o es un gigante de 200 MB que ahoga a las herramientas online. Tanto Excel como LibreOffice pueden hacer el trabajo, pero cada uno tiene sus propias peculiaridades. En Microsoft Excel (Office 365 / Excel 2019+): Abre tu XLSX, ve a Archivo → Guardar como, y en el menú desplegable 'Guardar como tipo', elige 'CSV UTF-8 (delimitado por comas) (*.csv)'. Esta opción, que Microsoft *por fin* añadió en Excel 2016, guarda correctamente con codificación UTF-8 con BOM. Ten cuidado de no elegir la opción 'CSV (delimitado por comas)' a secas; esa guarda usando la antigua codificación Windows-1252, una trampa en la que han caído incontables desarrolladores. Excel te advertirá de que solo se guarda la hoja activa. Haz clic en Aceptar y repite el proceso para cualquier otra hoja que necesites. En LibreOffice Calc (una herramienta fantástica, gratuita y multiplataforma): Abre el archivo, ve a Archivo → Guardar una copia... (usar 'Guardar como' cambiaría tu archivo actual). Selecciona 'Texto CSV (.csv)' como formato y confirma que quieres Mantener el formato actual. Esto abre un diálogo muy potente con opciones explícitas. Puedes establecer el Delimitador de campo, el Delimitador de texto (déjalo como comillas dobles) y, lo más importante, el Juego de caracteres. Elige 'Unicode (UTF-8)'. LibreOffice genera correctamente un archivo UTF-8 plano sin BOM, lo que lo hace ideal para su uso en scripts o programas. Aquí está la limitación de ambas herramientas: ninguna te da control sobre cómo se representan los nulos, las celdas vacías o los booleanos. Si tu proceso posterior necesita cadenas vacías para los nulos en lugar de simplemente nada, o espera `1`/`0` en lugar de `VERDADERO`/`FALSO`, no podrás hacerlo. Tendrás que crear un script para hacer una pasada de limpieza en el CSV más tarde o usar una herramienta más potente desde el principio.

Conversión con scripts de Python (para flujos de trabajo repetibles)

Cuando tienes que convertir el mismo tipo de archivo XLSX una y otra vez —como un informe semanal del sistema de contabilidad— los clics manuales son una receta para el desastre. Un simple script de Python es más rápido, más fiable y se ejecuta en segundos. Primero, necesitarás las librerías `openpyxl` y `pandas`. Instálalas con `pip install openpyxl pandas`. Después, el código es sorprendentemente limpio: ```python import pandas as pd df = pd.read_excel('reporte.xlsx', sheet_name='Datos de Ventas', engine='openpyxl') df.to_csv('reporte.csv', index=False, encoding='utf-8') ``` El parámetro `sheet_name` puede ser el nombre de la hoja como una cadena de texto o su número de índice basado en cero. No olvides `index=False`; evita que pandas escriba sus propios números de fila en la primera columna, lo que sin duda confundirá a la mayoría de las herramientas de importación. Para el parámetro `encoding`, `'utf-8'` crea un archivo UTF-8 estándar, sin BOM. Si sabes que el resultado va directamente a un usuario de Excel, usa `'utf-8-sig'` para incluir el BOM. Pandas también es inteligente con las fechas, analizándolas como objetos `datetime64`. Las escribe en el formato ISO 8601 (`AAAA-MM-DD HH:MM:SS`), que a la mayoría de las bases de datos les encanta. Si tu sistema de destino es quisquilloso y necesita algo como `MM/DD/AAAA`, simplemente añade el argumento `date_format='%m/%d/%Y'` a tu llamada `to_csv()`. Para archivos enormes (más de 50.000 filas), `openpyxl` carga el archivo entero en memoria, por lo que `pd.read_excel()` puede ser lento. La escritura también puede ser un cuello de botella. Si te estás topando con los límites de memoria, puedes escribir el CSV en trozos. Y si estás tratando con archivos `.xls` antiguos, el motor `xlrd` es más rápido, pero para los archivos `.xlsx` modernos, quédate con `openpyxl`. Si tienes que exportar múltiples hojas, `pd.read_excel('reporte.xlsx', sheet_name=None)` es un salvavidas. Devuelve un diccionario donde las claves son los nombres de las hojas y los valores son los DataFrames. Luego puedes recorrer este diccionario con un bucle y guardar cada hoja en su propio archivo CSV: la forma perfecta de automatizar la exportación de un libro de trabajo completo.

Validar tu CSV antes de que llegue a tu base de datos

Un CSV puede parecer perfecto en una vista previa y aun así hacer añicos la importación a tu base de datos. Cualquiera que haya visto un trabajo de importación fallar silenciosamente después de 20 minutos conoce ese dolor. Unos pocos pasos rápidos de validación pueden detectar estos problemas a tiempo. Primero, comprueba el número de filas. Si tu XLSX tenía 12.847 filas de datos y una cabecera, tu CSV debería tener exactamente 12.848 líneas. En Linux o macOS, `wc -l reporte.csv` te da la respuesta al instante. Si los números no coinciden, probablemente una celda contenía un carácter de nueva línea, un problema común en los campos de 'notas' donde los usuarios simplemente pulsan Enter. Un buen generador de CSV debería entrecomillar esto correctamente, pero es un punto de fallo frecuente. Luego, revisa al azar los caracteres especiales. Encuentra una fila en el XLSX original con un acento, un símbolo de moneda o texto no latino. Ahora abre el CSV en un editor de texto que muestre la codificación del archivo (tanto VS Code como Notepad++ lo hacen). Confirma que la codificación es la que elegiste y que los caracteres se renderizan correctamente. Prueba el delimitador. Si usaste una coma, busca en el texto en crudo comas que no estén dentro de comillas. Un comando rápido de `grep` en Linux (`grep -P '(?<!\" ),[^\"\\n]*(?<!\" ),' reporte.csv`) puede ayudar a encontrar filas donde el entrecomillado podría haber fallado, aunque quizás necesites ajustar la expresión regular para tus datos específicos. Finalmente, valida los tipos de datos de algunas columnas. Si se supone que una columna es de números enteros, compruébalo. En Python, puedes cargar el CSV y verificar `pd.read_csv('reporte.csv')['id_pedido'].dtype`. Debería decir `int64`. Si dice `object`, tienes un problema: un carácter de texto perdido, un error `#N/A` que se te pasó por alto, o un símbolo de moneda que se coló en una celda numérica. Dedicar cinco minutos a estas comprobaciones te ahorrará horas depurando una carga de datos fallida.

Casos límite comunes y limitaciones honestas

Incluso con las herramientas adecuadas, algunas características de XLSX simplemente no se trasladan limpiamente al sencillo mundo del CSV. Aquí hay algunas trampas comunes. Celdas combinadas: Las celdas combinadas de Excel son un truco visual. Cuando las conviertes a CSV, solo sobrevive el valor de la celda superior izquierda del área combinada; las demás celdas quedan vacías. Seamos claros: no existe una solución limpia y automatizada para esto. Debes descombinar las celdas en Excel *antes* de convertir (Seleccionar todo, Formato → Celdas → Alineación, desmarcar Combinar celdas) y rellenar manualmente las celdas que ahora están vacías. Múltiples filas de encabezado: Es común ver informes con dos o tres filas de encabezado: una categoría principal, una subcategoría y luego los nombres de columna reales. Los analizadores de CSV están diseñados para una única fila de encabezado. Este es otro trabajo de limpieza manual; tendrás que simplificar los encabezados en el XLSX o eliminar las filas sobrantes del CSV antes de que sea útil. Errores en las fórmulas: Si una celda en Excel muestra `#¡REF!`, `#¡DIV/0!` o `#¡VALOR!`, ese texto exacto es lo que se escribirá en tu CSV. Esas cadenas de texto contaminarán cualquier columna numérica y causarán errores de tipo durante la importación. Límpialos primero en Excel, ya sea arreglando los datos de origen o envolviendo las fórmulas en una función `SI.ERROR()`. Archivos muy grandes: CocoConvert es generoso, manejando archivos de hasta 50 MB de forma gratuita y 200 MB con una cuenta. Para cualquier cosa más grande, una herramienta online no es práctica. Cambia al método de Python/pandas o usa la herramienta de línea de comandos de LibreOffice (`libreoffice --headless --convert-to csv nombre_archivo.xlsx`). Archivos XLSX protegidos con contraseña: Ninguna herramienta online, incluyendo CocoConvert, puede abrir un archivo protegido con contraseña. Tienes que quitar la contraseña tú mismo en Excel (Archivo → Información → Proteger libro → Cifrar con contraseña), guardar el archivo y luego subirlo. Imágenes y gráficos: Se descartan silenciosamente. Simplemente no existen en el formato CSV. Si tu hoja era principalmente un gráfico con una pequeña tabla de datos, el gráfico desaparecerá en el éter, dejando solo el texto. No es un error, solo una limitación fundamental del formato CSV.

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →