Zeilenumbrüche in der generierten CSV-Datei machen mich verrückt

8

Ich versuche einen Export einiger Daten zu machen, die ich in einer Datentabelle gespeichert habe. Einige dieser Werte haben einen Zeilenumbruch. Jetzt, jedes Mal, wenn ich versuche, die Datei in Excel (2010) zu importieren, werden die lingebreaks als eine neue Zeile anstelle eines tatsächlichen Zeilenumbrüche erkannt.

Ich habe stundenlang gesucht, viele Lösungen gesehen, aber ich kann es einfach nicht reparieren lassen.

So gebe ich meine CSV-Datei aus: (Variable csvfile ist ein Stringbuilder)

%Vor%

Wenn ich es mit Excel manuell öffne, wird es gut angezeigt. Da Excel 2003 das Dateiformat nicht unterstützt, muss ich es importieren. Beim Import werden die Zeilenumbrüche (\ n in den Feldern) als neue Zeile angezeigt.

Leider kann ich Ihnen kein Beispiel für die echten Daten geben, mit denen ich arbeite (es sind alles persönliche Daten), aber ich kann Ihnen ein Beispiel geben, wie es schief geht:

%Vor%

Es ist eine einfache CSV-Datei, und wenn Sie es importieren, werden Sie sehen, wo es schief geht. Ich verkapsele standardmäßig Felder mit doppelten Anführungszeichen. Ich entferne auch führende Leerzeichen standardmäßig von den Werten.

Ich habe mindestens zwei Tage mit diesem scheinbar einfachen Problem verbracht, aber für das Leben von mir kann ich nicht herausfinden, wie ich es beheben kann. Ich habe mehrere Themen zu demselben Problem gesehen, aber keine der dort angebotenen Lösungen scheint das zu beheben.

    
Melle Groenewoud 10.05.2011, 14:55
quelle

5 Antworten

3

Das funktioniert für mich:

a) Das Festlegen von Response.ContentEncoding = System.Text.Encoding.UTF8 reicht nicht aus, damit Excel UTF-8-Dateien korrekt öffnet. Stattdessen müssen Sie einen Byte-order-mark (BOM) -Header für die Excel-Datei manuell schreiben:

%Vor%

b) Senden Sie als Oktettstream, verwenden Sie einen Dateinamen mit der Erweiterung .csv und geben Sie den Dateinamen an, wie es für die HTTP-Spezifikation erforderlich ist:

%Vor%

c) verwende doppelte Anführungszeichen für alle Felder

Ich habe gerade überprüft und für mich Excel öffnet heruntergeladene Dateien wie folgt richtig, einschließlich Felder mit Zeilenumbrüchen.

Beachten Sie jedoch, dass Excel diese CSV-Datei auf allen Systemen, deren Standardtrennzeichen von "," abweicht, nicht korrekt öffnet. Z.B. Wenn ein Benutzer Excel auf einem Windows-System ausführt, das auf deutsche Ländereinstellungen festgelegt ist, wird Excel die Datei nicht korrekt öffnen, da ein Semikolon anstelle eines Kommas als Trennzeichen erwartet wird. Ich denke nicht, dass man etwas dagegen tun kann.

    
Ben Schwehn 10.05.2011, 15:40
quelle
1

Ich glaube nicht, dass Sie eine neue Zeile in einem CSV-Feld haben können, da ein Zeilenumbruch einen neuen Datensatz anzeigt. Können Sie alle Zeilenumbrüche im Feldwert ersetzen, bevor Sie sie zur Zeichenfolge hinzufügen? Oder vielleicht können Sie eine Excel-Datei erstellen, sie sollten Zeilenumbrüche in einem Feld zulassen.

    
toby 10.05.2011 15:02
quelle
1

Sie dürfen einen Zeilenumbruch in einer CSV-Datei haben, solange das Feld korrekt dotiert ist. Das Problem hier scheint Excel zu bekommen, den Datensatz korrekt zu importieren.

Dies wurde zuvor auf der Website mit einigen möglichen Lösungen gefragt:

  • Legen Sie die Codierung für die Ausgabedatei auf ASCII oder UTF-8 fest. Da Sie es in der Frage auf UTF-8 setzen, versuchen Sie ASCII als nächstes. ( link )

  • Ändern Sie den Dateinamen in .csv , wodurch Excel dazu verleitet werden könnte, die Datei korrekt zu importieren ( link )

Factor Mystic 10.05.2011 15:08
quelle
0

UTF-Dateien, die eine Stückliste enthalten, führen dazu, dass Excel neue Zeilen im wahrsten Sinne des Wortes behandelt, auch wenn dieses Feld von Anführungszeichen umgeben ist. (Getesteter Excel 2008 Mac)

Die Lösung besteht darin, neue Zeilen einen Zeilenumbruch (CHR 13) anstelle eines Zeilenvorschubs zu machen.

    
Stephen 09.12.2011 08:11
quelle
0

Ich hatte das gleiche Problem. Ich kam zu der Lösung beim Browsen dieses Blog im Abschnitt - "Exportieren nach Excel mit der richtigen Formatierung:"

Ich habe meinen Code wie folgt geändert:

%Vor%

Es hat für mich funktioniert. Jetzt erscheint der Text mit Zeilenumbrüchen in einzelnen Zellen und nicht in einer neuen Zelle (Zeile) für jeden Zeilenumbruch.

    
deepakg_rao 30.05.2012 16:18
quelle

Tags und Links