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.
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!
Nachfolgend finden Sie die Regeln, wenn Sie glauben, dass es zufällig ist. Auf Basis dieser Regeln kann eine Utility-Funktion erstellt werden.
Wenn der Wert ein Komma, eine neue Zeile oder ein Anführungszeichen enthält, sollte der String-Wert in Anführungszeichen zurückgegeben werden.
Alle doppelten Anführungszeichen im Wert sollten mit einem anderen doppelten Anführungszeichen versehen werden.
Wenn der Wert kein Komma, Newline oder Anführungszeichen enthält, sollte der Wert von String unverändert zurückgegeben werden.
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;
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)