4dim / Notas

Escribir un CSV que no se rompa al abrirlo

El formato parece el más simple que existe hasta que el archivo lo abre una persona, en Excel, en Windows, en Colombia. Cada una de esas palabras añade una trampa: el entrecomillado, los acentos, el orden de las defensas y el precio que se acepta.

Un archivo que se abre a ojo

Si tu producto exporta datos a una hoja de cálculo, esta nota reúne las cuatro decisiones que deciden si ese archivo se abre bien o genera un mensaje al soporte. Ninguna es difícil; las cuatro se olvidan.

El formato de valores separados por comas parece el más simple que existe. Pegas los datos con comas en medio y ya está.

Lo que lo complica es el destino: estos archivos los abre una persona, en Excel, en un computador con Windows, en Colombia. Y cada una de esas cuatro palabras añade una trampa.

Es la pieza con más trampas por línea de todo el camino de una descarga.

Por eso vive aislada del resto —sin tocar la base de datos— y tiene prueba propia: es la parte que más se puede equivocar y la más fácil de comprobar si está sola.

Entrecomillar solo cuando hace falta

Primera decisión, y va contra lo que hacen casi todas las bibliotecas.

Lo seguro es entrecomillar todo. Nunca falla y se escribe en una línea. El precio es que el archivo, abierto en un editor de texto, se lee fatal: comillas por todas partes, en cada celda, incluidas las que solo llevan un número.

Nosotros entrecomillamos solo cuando hace falta: si el valor tiene una coma, una comilla o un salto de línea. Y cuando hay una comilla dentro, se dobla, que es lo que dice la norma del formato.

El argumento es el del apartado anterior: estos archivos se abren a ojo, y no solo en Excel. Alguien los mira en un editor para comprobar que salió lo que esperaba, y un archivo legible se comprueba de un vistazo.

Tres bytes que evitan la conversación de los acentos

La segunda ahorra más soporte que ninguna en un país con tildes.

Al principio del archivo van tres bytes invisibles llamados marca de orden. No se ven al abrirlo, no cuentan como dato, y sirven para una cosa: decirle a Excel en qué codificación está el archivo.

Sin ellos, Excel en Windows abre el archivo en la codificación local del sistema, y todas las tildes salen rotas. «Martínez» se convierte en un jeroglífico.

No es un fallo raro: es el comportamiento normal, y le pasa a todo el mundo que exporta sin pensarlo. Tres bytes y te ahorras la conversación de «se ven mal los acentos», que además deja a quien la recibe con la sensación de que el producto está mal hecho.

Y el mismo párrafo vale para los saltos de línea: la norma pide la pareja de retorno y salto, no el salto solo. Es lo que esperan las herramientas de Windows.

El orden de las defensas, que es lo que se olvida

Hay otra defensa importante en este archivo: la que impide que el nombre de un contacto se ejecute como una fórmula al abrir la hoja. La contamos en un contacto llamado HYPERLINK y no la repetimos aquí.

Lo que sí pertenece a esta: el orden en que se aplican.

La defensa contra fórmulas añade un carácter delante del valor. El entrecomillado decide si hacen falta comillas. Y el orden importa: si se añadiera el carácter después de decidir las comillas, habría que volver a mirar si ahora hacen falta.

Ese es justo el paso que se olvida, porque el resultado parece correcto en las pruebas normales y solo falla con valores raros — que son exactamente los que trae un nombre escrito por un desconocido.

Cuando dos transformaciones se aplican al mismo valor, el orden es parte de la definición, no un detalle de implementación.

El precio que se acepta, escrito

Última decisión, y es un ejemplo de cómo se documenta un compromiso.

La defensa contra fórmulas también alcanza a los números negativos: un valor que empiece por un signo menos recibe el mismo tratamiento y llega a la hoja como texto, no como número.

Es un precio real. Se acepta porque en este archivo no hay ninguna columna que pueda ser negativa: los recuentos no bajan de cero y las fechas van en formato internacional.

Lo importante no es la decisión: es que está escrita, con la condición que la sostiene y con la salida si deja de valer. El día que haya una columna negativa, el arreglo es exceptuar lo que sea un número, no quitar la defensa.

DecisiónLo que cuestaPor qué se acepta
Entrecomillar pocoMás códigoEl archivo se lee a ojo
La marca de ordenTres bytesLas tildes salen bien
Desarmar fórmulasLos negativos llegan como textoNo hay columnas negativas

Qué hacer entonces

  • Exporta un contacto con tilde y ábrelo en Windows. Es la prueba de dos minutos que descubre la mitad de estos fallos.
  • Prueba con un nombre que lleve una coma y una comilla. «Pérez, Ana "La Jefa"» rompe casi cualquier exportador casero.
  • Escribe el orden de tus transformaciones. Y pruébalo, porque el orden equivocado pasa las pruebas fáciles.
  • Documenta los precios que aceptas. Con la condición que los sostiene y qué hacer cuando deje de valer.
  • Aísla esta pieza del resto. Sin base de datos, se prueba entera en segundos.

Esta nota sale de nuestro trabajo en Desarrollo de Software a medida.

← todas las notas