wake-up-neo.com

Wie kann ich Kommata und Sprachmarken in CSV-Dateien umgehen, damit sie in Excel funktionieren?

Ich generiere eine CSV-Datei (durch Kommas und nicht durch Tabulatoren getrennt). Meine Benutzer werden die CSV-Datei höchstwahrscheinlich in Excel durch Doppelklick öffnen. Meine Daten enthalten möglicherweise Kommas und Sprachmarken, daher kann ich den folgenden Angaben entziehen.

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 immer der Weg. Hier ist mein Fehler: Wenn ich diese Datei in Excel 2010 öffne, wird meine Flucht nicht beachtet. Sprachmarken erscheinen auf dem Blatt, und das Komma verursacht neue Spalten.

96
centralscru

Wir haben schließlich die Antwort darauf gefunden.

Excel beachtet das Flucht von Kommas und Sprachmarken nur, wenn dem Spaltenwert KEIN Leerzeichen vorangestellt ist. So generieren Sie die Datei ohne Leerzeichen ...

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!

195
centralscru

Nachfolgend 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, eine neue Zeile oder ein Anführungszeichen enthält, sollte der String-Wert in Anführungszeichen zurückgegeben werden.

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

  3. Wenn der Wert kein Komma, Newline oder Anführungszeichen enthält, sollte der Wert von String unverändert zurückgegeben werden.

53
Yashu

Nach Yashus Anweisungen habe ich die folgende Funktion geschrieben (es ist PL/SQL-Code, sollte aber 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;
2
aaguilera

Auch einfache Anführungszeichen funktionieren gut, auch ohne die doppelten Anführungszeichen, 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 das einfache Anführungszeichen als "Textqualifikationsmerkmal" im Assistenten "Text in Spalten" auswählen)

0
golimar