Wie soll ich Kommas und Sprachmarken in CSV-Dateien umgehen, damit sie in Excel funktionieren?

109

Ich generiere eine CSV-Datei (durch Kommas und nicht durch Tabulatoren getrennt). Meine Benutzer öffnen die CSV-Datei höchstwahrscheinlich in Excel, indem sie darauf doppelklicken. Meine Daten können Kommas und Sprachmarken enthalten, daher entkomme ich diesen wie folgt.

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."

Soweit ich weiß, war das schon immer so. Hier ist mein Problem: Wenn ich diese Datei in Excel 2010 öffne, wird mein Escapezeichen nicht berücksichtigt. Auf dem Blatt werden Sprachmarkierungen angezeigt, und das Komma verursacht neue Spalten.

centralscru
quelle

Antworten:

219

Wir haben schließlich die Antwort darauf gefunden.

Excel berücksichtigt das Entkommen von Kommas und Sprachmarken nur, wenn dem Spaltenwert KEIN Leerzeichen vorangestellt ist. Also generiere die Datei ohne Leerzeichen wie dieses ...

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."

... das Problem behoben. Hoffe das hilft jemandem!

centralscru
quelle
2
Dies ist ein Problem, auf das ich zuvor gestoßen bin und das ich immer vergesse. Excel sollte dieses Verhalten einstellen, da es lediglich Verwirrung stiftet und keine hilfreiche Regel ist. Das oder csvs sollten zwingend keine Leerzeichen zwischen Kommas haben.
Jacques Mathieu
60

Unten finden Sie die Regeln, wenn Sie glauben, dass es zufällig ist. Auf Basis dieser Regeln kann eine Utility-Funktion erstellt werden.

  1. Wenn der Wert ein Komma, einen Zeilenumbruch oder ein doppeltes Anführungszeichen enthält, sollte der String-Wert in doppelten Anführungszeichen eingeschlossen zurückgegeben werden.

  2. Alle doppelten Anführungszeichen im Wert sollten mit einem anderen doppelten Anführungszeichen maskiert werden.

  3. Wenn der Wert kein Komma, keine neue Zeile oder kein doppeltes Anführungszeichen enthält, sollte der String-Wert unverändert zurückgegeben werden.

AlphaBetaGamma
quelle
4
Tut es etwas weh, etwas in Anführungszeichen zu setzen, das keine Kommas, doppelten Anführungszeichen oder Zeilenumbrüche enthält?
Erik Reppen
2
Nein ErikReppen Ich glaube nicht, dass das normal wehtun würde. Ich gehöre zu einem Java-Hintergrund, in dem empfohlen wird, keine neuen Zeichenfolgen zu erstellen, indem Text in alten ersetzt wird, da diese ihren eigenen Anteil im Heap-Speicher haben. Wenn Sie möchten, können Sie alle Werte bedingungslos ersetzen und uns mitteilen, ob dies zu Problemen führt, obwohl dies nicht der Fall sein sollte.
AlphaBetaGamma
2
Ein Feld, das mit einem Leerzeichen beginnt oder endet, sollte in Anführungszeichen gesetzt werden.
Jonathan Rosenne
2

Gemäß den Anweisungen von Yashu habe ich die folgende Funktion geschrieben (es ist PL / SQL-Code, aber er sollte leicht an jede andere Sprache anpassbar sein).

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;
aaguilera
quelle
0

Einfache Anführungszeichen funktionieren auch gut, auch ohne den doppelten Anführungszeichen zu entgehen, zumindest in Excel 2016:

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

Excel fügt dies in 5 Spalten ein (wenn Sie im Assistenten "Text in Spalten" das einfache Anführungszeichen als "Textqualifizierer" auswählen).

Golimar
quelle
-3

Selbst nach doppelten Anführungszeichen hatte ich dieses Problem einige Tage lang.

Ersetzte Pipe Delimiter durch Komma, dann funktionierte alles einwandfrei.

Ramkumar Navaneethakrishnan
quelle
1
Sie sollten ein Beispiel geben, was für Sie funktioniert hat, damit das OP es bei Bedarf kopieren und einfügen kann.
Reuben Tanner