CSV a JSON desde Excel: Power Query, la trampa del BOM y el quoting
Excel guarda alegremente tu hoja como CSV y se queda tan ancho. El archivo que aterriza en disco es, diez de cada diez veces, distinto del que tu herramienta JSON espera. Saber qué destroza Excel es lo que mata los errores raros al importar.
Guarda como CSV UTF-8, no solo como CSV
Excel ofrece tres opciones de CSV en Guardar como: CSV (delimitado por comas), CSV UTF-8 y una variante regional. El CSV (delimitado por comas) por defecto es Windows-1252 en la mayoría de instalaciones, que destroza cualquier carácter no ASCII (vocales con tilde, emoji, comillas tipográficas) en cuanto sale del archivo.
Elige siempre CSV UTF-8 (delimitado por comas). La salida cumple RFC 4180 (con un matiz que viene ahora) y aguanta el viaje por cualquier parser JSON moderno.
La pega: el export UTF-8 de Excel mete un BOM UTF-8 (EF BB BF) al principio. Los parsers JSON estrictos y muchas herramientas CLI petan al ver un BOM en la primera cabecera. Quítalo antes de parsear, o usa una herramienta que lo gestione (Power Query lo hace).
Quoting y el problema de la coma dentro de la celda
El RFC 4180 dice que un campo que contenga una coma, un salto de línea o una comilla debe ir entre comillas dobles, y cualquier comilla literal dentro debe duplicarse (""). Excel lo cumple a rajatabla al guardar CSV UTF-8, que es por lo que tu CSV tan limpito de pronto tiene líneas así:
id,name,address
1,Ada Lovelace,"Madrid, ES"
2,Margaret Hamilton,"Cambridge, ""MA"""
Un split ingenuo por , te saca cuatro columnas en vez de tres. Usa un parser que entienda CSV, no split. En Python la stdlib trae csv; en Node lo habitual es csv-parse o papaparse; en jq, mira la página siguiente.
Power Query es la herramienta correcta dentro de Excel
Si no quieres salir de Excel, Power Query (pestaña Datos, Obtener y transformar) lee la hoja, expone un pipeline gráfico y exporta JSON con una sola línea de M:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Json = Json.FromValue(Source)
in
Json
La ventaja sobre Guardar-como-CSV-y-convertir es que Power Query maneja BOM, codificaciones mezcladas e inferencia de tipos en un paso. El resultado es un array de records JSON, listo para soltar en un fetch o en una fixture.
Para cosas puntuales (una hoja, una conversión, sin recurrencia), Guardar como CSV UTF-8 y una herramienta del navegador van más rápido. Para pipelines repetibles (un export mensual de finanzas), Power Query se queda en el workbook y corre al refrescar.
Las columnas de fecha son el bug más típico
Excel guarda fechas como números seriales (días desde 1900-01-01, con una rareza por el día bisiesto que no existió). Al exportar a CSV esos números se renderizan según el locale que Excel haya decidido, que no es ISO 8601 por defecto.
Si tu consumidor JSON espera "2025-11-19", fija el formato de la columna a aaaa-mm-dd en Excel antes de guardar, o conviértelo en la herramienta JSON. Si no, te salen strings como 19/11/2025 (es-ES), 11/19/2025 (en-US) o 19-Nov-2025 (en-GB), y tus tipos de TypeScript te están mintiendo.
Convención más segura: guarda las fechas en Excel como texto (con apóstrofo delante) en el formato ISO exacto, y deja que las herramientas posteriores las parseen como strings. Pierdes la aritmética de fechas de Excel; ganas un CSV que significa lo mismo en cualquier locale.
Ejemplo completo
powershell# Quita el BOM UTF-8 que mete Excel y luego convierte a JSON
$path = "data.csv"
$raw = Get-Content $path -Raw -Encoding UTF8
if ($raw.StartsWith([char]0xFEFF)) { $raw = $raw.Substring(1) }
# PowerShell 7+ ConvertFrom-Csv entiende RFC 4180
$rows = $raw | ConvertFrom-Csv
$rows | ConvertTo-Json -Depth 5 |
Out-File -FilePath "data.json" -Encoding utf8 ¿Solo necesitas el resultado?
Cuando solo quieres meter el CSV que te ha mandado el equipo financiero en un JSON que tu API pueda tragar, abrir Power Query es exagerado. Pega el CSV en el convertidor CSV a JSON del navegador, mira cómo se quita el BOM y se normaliza el quoting, copia el JSON. Un paso, corre en local, sin upload.
Abrir Convertidor CSV ↔ JSON →Preguntas frecuentes
¿Por qué mi consumidor JSON ve un carácter raro al principio del archivo?
Es el BOM UTF-8 que mete Excel al exportar como CSV UTF-8. La mayoría de parsers JSON lo rechazan. Quita los tres primeros bytes (EF BB BF) antes de parsear, o usa Power Query, que lo gestiona de forma transparente.
¿Puedo hacer round-trip Excel a JSON a Excel sin perder datos?
Casi. Números y strings sobreviven limpios. Las fechas pierden el formato serial de Excel y pasan a ser strings ISO. Las fórmulas siempre quedan como su valor evaluado. Si necesitas recuperar fórmulas, parsea el XLSX binario, no el CSV.
¿Excel guarda CSV con CRLF o LF?
Excel para Windows escribe CRLF, Excel para Mac escribe CR (versiones antiguas) o LF. El RFC 4180 prefiere CRLF. La mayoría de herramientas modernas aceptan ambos, pero algún importador legacy se atraganta; si te pasa, normaliza a LF o CRLF en un paso previo.