¿Cómo debo evitar las comas y las marcas de voz en los archivos CSV para que funcionen en Excel?


111

Estoy generando un archivo CSV (delimitado por comas en lugar de pestañas). Mis usuarios probablemente abrirán el archivo CSV en Excel haciendo doble clic en él. Mis datos pueden contener comas y marcas de habla, por lo que los escapo de la siguiente manera.

Reference, Title, Description
1, "My little title", "My description, which may contain ""speech marks"" and commas."
2, "My other little title", "My other description, which may also contain ""speech marks"" and commas."

Hasta donde yo sé, esa ha sido siempre la forma de hacerlo. Aquí está mi asombro: cuando abro este archivo en Excel 2010, no se respeta mi escape. Aparecen marcas de habla en la hoja y la coma genera nuevas columnas.

Respuestas:


219

Finalmente encontramos la respuesta a esto.

Excel solo respetará el escape de comas y marcas de voz si el valor de la columna NO está precedido por un espacio. Entonces generando el archivo sin espacios como este ...

Reference,Title,Description
1,"My little title","My description, which may contain ""speech marks"" and commas."
2,"My other little title","My other description, which may also contain ""speech marks"" and commas."

... solucionó el problema. ¡Espero que esto ayude a alguien!


2
Este es un problema con el que me he encontrado antes y siempre lo olvido. Excel debería interrumpir este comportamiento, ya que simplemente crea confusión y no es una regla útil para tener en primer lugar. Eso o csv no deben tener espacios en blanco obligatorios entre comas.
Jacques Mathieu

61

A continuación se muestran las reglas si cree que es aleatorio. Se puede crear una función de utilidad sobre la base de estas reglas.

  1. Si el valor contiene una coma, una nueva línea o comillas dobles, el valor de la cadena debe devolverse entre comillas dobles.

  2. Cualquier carácter de comillas dobles en el valor debe escaparse con otra comilla doble.

  3. Si el valor no contiene una coma, una nueva línea o comillas dobles, entonces el valor de Cadena debe devolverse sin cambios.


4
¿Le duele algo el ajustar entre comillas algo que no tiene comas, comillas dobles o nuevas líneas?
Erik Reppen

2
No, ErikReppen, no creo que eso dolería normalmente. Pertenezco a un fondo de Java donde se recomienda no crear nuevas cadenas reemplazando el texto en las antiguas, ya que tienen su propia parte dentro de la memoria del montón. Si lo desea, puede reemplazar incondicionalmente todos los valores y decirnos si causa algún problema, aunque no debería.
AlphaBetaGamma

2
Se debe citar un campo que comience o termine con un espacio.
Jonathan Rosenne

2

De acuerdo con las instrucciones de Yashu, escribí la siguiente función (es código PL / SQL, pero debería ser fácilmente adaptable a cualquier otro idioma).

FUNCTION field(str IN VARCHAR2) RETURN VARCHAR2 IS
    C_NEWLINE CONSTANT CHAR(1) := '
'; -- newline is intentional

    v_aux VARCHAR2(32000);
    v_has_double_quotes BOOLEAN;
    v_has_comma BOOLEAN;
    v_has_newline BOOLEAN;
BEGIN
    v_has_double_quotes := instr(str, '"') > 0;
    v_has_comma := instr(str,',') > 0;
    v_has_newline := instr(str, C_NEWLINE) > 0;

    IF v_has_double_quotes OR v_has_comma OR v_has_newline THEN
        IF v_has_double_quotes THEN
            v_aux := replace(str,'"','""');
        ELSE
            v_aux := str;
        END IF;
        return '"'||v_aux||'"';
    ELSE
        return str;
    END IF;
END;

0

Las comillas simples también funcionan bien, incluso sin escapar de las comillas dobles, al menos en Excel 2016:

'text with spaces, and a comma','more text with spaces','spaces and "quoted text" and more spaces','nospaces','NOSPACES1234'

Excel lo pondrá en 5 columnas (si elige la comilla simple como "Calificador de texto" en el asistente "Texto a columnas")


-3

Incluso después de las comillas dobles, tuve este problema durante unos días.

Se reemplazó el delimitador de tubería con coma, luego todo funcionó bien.


1
Debe dar una muestra de lo que funcionó para usted para que el OP pueda copiarlo y pegarlo si es necesario.
Reuben Tanner
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.