Un XLS o XLSX se convierte a CSV cuando hay que sacar sus datos de Excel para llevarlos a una base de datos, a un script o a otra aplicación que no entiende el formato de Excel. Al guardar como CSV, el archivo resultante es solo texto plano con los valores de una hoja, sin fórmulas, sin formatos y sin el resto de hojas. Al terminar el tutorial sabrás hacerlo con Guardar como, con una macro que exporta todas las hojas de golpe, con PowerShell para una carpeta entera, con Python (pandas y openpyxl) y con Node.js (SheetJS y ExcelJS). Funciona en Microsoft 365, Excel 2024, 2021, 2019 y 2016; el camino de Power Query para volver a abrirlo también está en estas versiones.
Qué es un CSV y por qué exportar a CSV desde Excel
Un CSV (Comma-Separated Values) es un archivo de texto plano donde cada línea es una fila y los campos se separan con comas. Lo entiende casi cualquier programa: bases de datos como MySQL o PostgreSQL, scripts en Python y Node.js, hojas de cálculo distintas de Excel y muchas herramientas de importación.
Imagina una hoja de cálculo de Ventas 2026 con tres hojas (Enero, Febrero y Marzo) que necesitas cargar en una base de datos. El CSV guarda únicamente los valores tal como se ven en pantalla, de UNA sola hoja; las fórmulas =B2*C2 se convierten en el número resultante, y los formatos (colores, moneda, negrita) desaparecen. Esa es su ventaja y a la vez su limitación: portable, pero mínimo.
Las cuatro formas de pasar de XLS o XLSX a CSV
- Guardar como CSV desde Excel. Para una hoja concreta, con un clic; el archivo pasa a
.csven la carpeta que elijas. - Guardar una hoja concreta con macro. Recorre todas las hojas del libro y crea un
.csvpor hoja con el nombre de la pestaña. - PowerShell y Excel por línea de comandos. Para una carpeta con varios libros: abre cada uno, guarda cada hoja como CSV y cierra sin abrir ventanas.
- Python o Node.js. Para procesos largos o automatizados; pandas, openpyxl, SheetJS y ExcelJS leen el
.xlsxy escriben cada hoja como.csv.
Cada una resuelve un caso distinto. Si solo exportas una hoja, basta Guardar como; si son varias, macro o script; si son muchos archivos, PowerShell o Python.
Guardar como CSV desde Excel con un clic
- Abre el libro
Ventas.xlsxy quédate en la hoja que quieres exportar, por ejemploEnero. - Pulsa F12 o ve a Archivo > Guardar como.
- Elige la carpeta de destino y abre la lista de Tipo.
- Selecciona CSV (delimitado por comas) (*.csv) y pulsa Guardar.
- Verás dos avisos: «Solo puede guardar la hoja activa. ¿Desea guardarla?» y «Guardar como CSV puede contener características no compatibles…». Pulsa Aceptar y luego Sí.
- El archivo se queda junto al original, pero ahora como
Enero.csv(si escribes otro nombre, ese).
La extensión pasa de .xlsx a .csv porque el filtro del cuadro Guardar como añade la extensión por ti. Si el libro tenía varias hojas, solo se guarda la que está activa en ese momento.
Elegir el delimitador y la codificación al guardar
Al abrir Herramientas > Opciones web dentro de Guardar como puedes fijar UTF-8 (Unicode 65001) para que las tildes y la eñe no se rompan al abrir el .csv en otros programas. Esto es independiente del formato; el delimitador lo decide el tipo elegido (CSV usa coma por defecto en la versión en español).
.csv de Excel va con coma. Si lo necesitas con punto y coma, guárdalo con otro programa o ábrelo y reemplaza la coma.Lo que se pierde al guardar como CSV
| Elemento | ¿Se guarda? | Dónde se queda |
|---|---|---|
| Valores tal como se ven | Sí | Cada celda |
| Cabeceras | Sí | Primera fila |
| Fórmulas | No, se sustituyen por su último valor calculado | — |
| Formatos (colores, moneda, negrita) | No | — |
| Gráficos, imágenes, validaciones, tablas dinámicas | No | — |
| Hojas que no sean la activa | No | Solo la hoja visible |
| Anchos de columna | Opcional | Solo si se elige en Herramientas > Opciones web > General > «Guardar siempre copia en formato…» |
Exportar una hoja concreta a CSV con una macro
La macro ExportarHojasCSV recorre todas las hojas del libro activo y guarda cada una como un .csv con el nombre de la pestaña, en la carpeta Documentos del usuario. Útil cuando tu libro Ventas.xlsx tiene Enero, Febrero y Marzo y necesitas los tres en archivos separados.
La macro lista para copiar y pegar
Sub ExportarHojasCSV()
Dim ws As Worksheet
Dim ruta As String
Dim hojaInicial As Worksheet
Set hojaInicial = ActiveSheet
ruta = Environ("USERPROFILE") & "\Documents\"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
ws.Activate
ActiveWorkbook.SaveAs _
Filename:=ruta & ws.Name & ".csv", _
FileFormat:=xlCSV, _
CreateBackup:=False
Next ws
hojaInicial.Activate
Application.DisplayAlerts = True
Application.ScreenUpdating = True
MsgBox "Archivos CSV guardados en: " & ruta
End Sub
Para usarla: Alt+F11 abre el editor VBA, Insertar > Módulo, pegas el código y F5 para ejecutar. Cada hoja queda como Enero.csv, Febrero.csv y Marzo.csv en Documentos.
Application.DisplayAlerts = False evita los avisos de Guardar como. Acuérdate de volverlo a poner en True al terminar, si no, también los desactiva en futuras operaciones.Archivos CSV guardados en: C:\Users\tu_usuario\Documents\
.csv. Si solo se crea uno, revisa que For Each ws recorra el ThisWorkbook y no otro libro.El archivo que Excel pregunta guardar en XLSX otra vez
Tras ejecutar la macro, Excel pide el libro como .xlsx para no perder las otras hojas. Pasos para silenciarlo:
- Pulsa Cancelar en el aviso (NO guardes todavía).
- En el editor VBA (Alt+F11), justo antes del
End Sub, añade la líneaThisWorkbook.Saveo usaApplication.DisplayAlerts = False(ya está en la macro de arriba). - Si prefieres conservarlo, ejecuta la macro y luego Archivo > Guardar
Ventas.xlsxa mano antes de cerrar.
La desactivación de avisos funciona porque SaveAs con FileFormat:=xlCSV no pregunta nada, y la línea Application.DisplayAlerts = True los reactiva al final. Por eso la macro cierra siempre con esa línea encendida.
Convertir varios XLS a CSV de una vez con PowerShell y Excel
Tienes una carpeta C:\Informes\ con enero.xlsx, febrero.xlsx y marzo.xlsx, y necesitas el .csv de cada hoja sin abrir Excel a mano. Un script de PowerShell lo hace leyendo la carpeta, abriendo cada libro y guardando cada hoja como .csv.
El script de PowerShell que recorre la carpeta
- Crea una carpeta
C:\SalidaCSV\para los CSV resultantes. - Pulsa Win+R, escribe
powershelly pulsa Intro. - Copia y pega el siguiente bloque:
$carpeta = "C:\Informes"
$salida = "C:\SalidaCSV"
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
Get-ChildItem -Path $carpeta -Filter *.xlsx | ForEach-Object {
$libro = $excel.Workbooks.Open($_.FullName)
foreach ($hoja in $libro.Worksheets) {
$hoja.Activate()
$libro.SaveAs("$salida\$($_.BaseName)_$($hoja.Name).csv", 6)
}
$libro.Close($false)
}
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Write-Host "Proceso terminado. Revisa $salida"
- Pulsa Intro y espera. Verás los CSV en
C:\SalidaCSV\con el patrónenero_Enero.csv,febrero_Febrero.csv, etc.
Proceso terminado. Revisa C:\SalidaCSV
-sheet, o un script en Python con pandas.Cuándo conviene un script así y cuándo no
Vale la pena con archivos sueltos y pocos (menos de cincuenta) y sin fórmulas complejas. Con muchos archivos o archivos grandes, Total Excel Converter es más estable y no abre una instancia de Excel por libro. Python con pandas (pd.read_excel + df.to_csv) aguanta mejor volúmenes grandes y se puede paralelizar. Evita PowerShell con Excel si el servidor es de producción: cada Workbooks.Open deja un proceso colgado si se corta el script.
Pasar de XLSX a CSV con Python (pandas y openpyxl)
Instala pandas y openpyxl y convierte Ventas.xlsx a un .csv por hoja, conservando los acentos con UTF-8 con BOM.
- Abre una terminal y ejecuta
pip install pandas openpyxl. - Crea un archivo
a_csv.pycon el bloque siguiente. - Ejecuta
python a_csv.py.
import pandas as pd
origen = "ventas.xlsx"
hojas = pd.read_excel(origen, sheet_name=None)
for nombre, df in hojas.items():
df.to_csv(f"{nombre}.csv", index=False, encoding="utf-8-sig")
print(f"{nombre}.csv -> {len(df)} filas")
Enero.csv -> 4 filas
Febrero.csv -> 4 filas
Marzo.csv -> 4 filas
pd.read_excel(origen, sheet_name=None) devuelve un diccionario {nombre_hoja: DataFrame}. El bucle for nombre, df in hojas.items() itera por cada hoja y la guarda con df.to_csv(...). index=False evita la columna extra del índice; encoding="utf-8-sig" añade el BOM para que Excel lea bien las tildes al volver a abrirlo.
Leer varias hojas en un solo dataframe
import pandas as pd
df = pd.read_excel("ventas.xlsx", sheet_name="Enero")
total = df["Cantidad"].sum()
df.to_csv("enero_con_total.csv", index=False, encoding="utf-8-sig")
Aquí sheet_name="Enero" carga una hoja sola como un DataFrame; df["Cantidad"].sum() calcula el total y to_csv lo exporta. Para unir todas las hojas en una sola tabla, añade una columna con el nombre y concatena con pd.concat(list(hojas.values()), keys=list(hojas.keys())).
UTF-8 con BOM para que Excel lea bien el CSV
[Detectar tipos de datos]
Al reimportar el .csv desde Datos > Obtener y transformar datos > Desde el texto/CSV, marca 65001: Unicode (UTF-8) en Origen del archivo. Si el CSV se guardó con encoding="utf-8" SIN BOM, Excel lo lee como Windows-1252 y muestra «María» como «MarÃa».
encoding="utf-8" sin BOM muestra mal las tildes al abrirlo en Excel español. utf-8-sig es la forma sencilla de evitarlo sin tocar la configuración regional del sistema.Pasar de XLSX a CSV con Node.js (SheetJS y ExcelJS)
Con Node.js instalado, instala SheetJS desde su CDN oficial (no desde el registro de npm, donde está desactualizado) y crea un script que lea cada hoja y la escriba como .csv.
- En la carpeta del proyecto ejecuta
npm init -yy luegonpm i --save https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz. - Crea
a_csv.jscon el código siguiente. - Ejecuta
node a_csv.js.
const XLSX = require("xlsx");
const fs = require("fs");
const libro = XLSX.readFile("ventas.xlsx");
for (const nombre of libro.SheetNames) {
const csv = XLSX.utils.sheet_to_csv(libro.Sheets[nombre]);
fs.writeFileSync(`${nombre}.csv`, csv, "utf-8");
console.log(`${nombre}.csv -> ${csv.split("\n").length - 1} filas`);
}
Enero.csv -> 4 filas
Febrero.csv -> 4 filas
Marzo.csv -> 4 filas
Con ExcelJS el camino es parecido pero con un bucle sobre workbook.worksheets y worksheet.getRow(i).values para serializar hoja a hoja antes de escribir. SheetJS calcula el separador según los datos; ExcelJS conserva los estilos si los necesitas en el .xlsx de salida.
Por qué el CSV sale vacío, con celdas unidas o con tildes rotas
Tres tropiezos típicos al guardar como CSV en Excel: la hoja activa no era la que esperabas, celdas combinadas que dejan huecos y tildes que se ven mal en el programa de destino.
La hoja activa no es la que querías exportar
| A | B | C | |
|---|---|---|---|
| 1 | Producto | Precio | Cantidad |
| 2 | Lapiz | 1,50 | 10 |
| 3 | Cuaderno | 3,20 | 5 |
| 4 | Goma | 0,80 | 12 |
El libro tiene tres pestañas (Enero, Febrero y Marzo) y solo se guardó Enero aunque querías Marzo. Causa: el cursor estaba en Enero cuando pulsaste F12. Arreglo: clic en la pestaña de la hoja que quieres y vuelve a Guardar como. En la macro VBA, la línea ws.Activate justo antes de SaveAs asegura que la hoja correcta queda como activa antes de escribir el archivo.
Las celdas combinadas dejan huecos en el CSV
| A | B | |
|---|---|---|
| 1 | Cliente | Importe |
| 2 | *(vacío)* | 120,00 |
| 3 | *(vacío)* | 85,00 |
| 4 | Garbarino | 50,00 |
La cabecera «Cliente» estaba en A1 y A2 combinadas con Combinar y centrar. Al guardar, solo A1 tiene «Cliente»; A2 queda en blanco. Causa: el CSV no soporta combinación de celdas. Arreglo: desactiva Combinar y centrar en Inicio > Alineación > Combinar y centrar, escribe «Cliente» en todas las celdas o usa una macro que copie el valor de A1 en A2 y siguientes antes de guardar.
Las tildes y la eñe se ven mal al abrir el CSV en otro programa
El CSV se guardó en codificación del sistema (Windows-1252) y la app destino espera UTF-8. Resultado: «María» aparece como «MarÃa». Tres arreglos, según el camino elegido:
- En Excel, abre Herramientas > Opciones web dentro de Guardar como y elige 65001 (UTF-8).
- En pandas, usa
encoding="utf-8-sig"endf.to_csv(...). - En SheetJS, pasa la opción
{ bookType: "csv", FS: "," }y codifica el archivo como UTF-8 al escribirlo, o usa la libreríaxlsxconcodepage: 65001.
El CSV se abre y aparece todo en una columna
Doble clic sobre el .csv abre Excel con el separador de la región (punto y coma en español) y el archivo trae comas; todas las celdas quedan en la columna A. Arreglo: Datos > Obtener y transformar datos > Desde el texto/CSV, elige coma como delimitador y UTF-8 como origen. La vista previa mostrará las columnas separadas antes de cargarlo; entonces Cerrar y cargar > Solo crear conexión si no quieres duplicar la hoja.
Lo que ya sabes hacer con XLS y CSV, y el siguiente paso
- Guardar como CSV sirve para una hoja concreta, con un clic y sin código.
- Una macro VBA exporta todas las hojas del libro como un
.csvpor hoja, manteniendo el nombre de cada pestaña. - Python (pandas) y Node.js (SheetJS o ExcelJS) automatizan procesos largos y dejan un script reutilizable cada vez que llegan nuevos archivos.
- Power Query abre el CSV con el delimitador y la codificación correctos, el camino de vuelta al libro original.
El siguiente paso natural es importar el CSV otra vez con Datos > Obtener y transformar datos > Desde el texto/CSV, eligiendo coma como delimitador y 65001 (UTF-8) como origen del archivo; así dejas el .csv como una tabla lista para analizar, sin las columnas pegadas en una sola ni las tildes rotas.
Dudas al convertir un Excel a CSV
1. ¿Cómo pasar un Excel a CSV gratis?
Desde el propio Excel no hace falta pagar nada: abre el archivo, ve a Archivo > Guardar como, elige la carpeta de destino y en Tipo despliega la lista hasta «CSV (separado por comas) (*.csv)». Pulsa Guardar y, si Excel te avisa de que el formato no admite algunas características, acepta; el libro se convierte sin coste ni instalación adicional.
2. ¿Cómo guardar un Excel en CSV con codificación UTF-8?
El «Guardar como» de Excel no ofrece UTF-8 entre sus opciones, así que el camino más fiable es guardar primero como CSV normal (Archivo > Guardar como > CSV) y luego abrir el archivo resultante en el Bloc de notas de Windows. Usa Archivo > Guardar como dentro del Bloc de notas, elige «Todos los archivos» en Tipo y en Codificación selecciona «UTF-8» antes de Guardar; así el archivo final queda en UTF-8 sin caracteres raros.
3. ¿Cómo guardar un Excel como CSV separado por comas?
En el libro abierto pulsa Archivo > Guardar como, escoge la carpeta y abre la lista Tipo; ahí aparece «CSV (separado por comas) (*.csv)», selecciónalo y pulsa Guardar. Si Excel pregunta si quieres mantener el formato CSV, di que Sí: el archivo se guardará con cada columna separada por una coma y cada fila en una línea nueva.
4. ¿Cómo pasar un Excel a CSV desde una página web?
Sí se puede, aunque perderás formatos y fórmulas porque el CSV solo guarda texto. Sube el archivo a un conversor online de confianza, elige pasar de XLS/XLSX a CSV, descarga el resultado y comprueba la codificación y el separador antes de abrirlo en otro programa. Para datos sensibles o con fórmulas que necesitas conservar, mejor hazlo desde el propio Excel con Archivo > Guardar como > CSV.
5. ¿Cómo guardar un archivo como CSV delimitado por comas?
En Excel, abrir el libro y elegir Archivo > Guardar como; en el campo Tipo seleccionar «CSV (separado por comas) (*.csv)» y pulsar Guardar. Excel usará la coma como delimitador de columnas y el salto de línea para separar las filas, así que el archivo se podrá abrir tal cual en Access, Bloc de notas o cualquier editor que espere ese formato.
Fuentes
- MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 12/10/2026
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 12/10/2026
- MicrosoftImportar un archivo de texto o CSV — documentación oficialconsultado el 12/10/2026
- SheetjsExcel con Node.js (ExcelJS y SheetJS) — documentación oficialconsultado el 12/10/2026