2012-04-03 5 views
0

Wir exportieren eine Liste der Händlerinformationen in CSV, damit der Kunde in Excel damit arbeiten und sie wieder in die App importieren kann.Wie exportiere ich Daten in eine CSV-Datei in C#, um sicherzustellen, dass Excel damit arbeiten kann?

Wenn wir die CSV-Datei selbst bearbeiten, funktioniert es perfekt, aber wenn Excel öffnet und speichert die Datei, verliert es alle CSV-Struktur.

Quotes werden entfernt und Semikolons werden ebenfalls entfernt.

Unser Export-Code sieht wie folgt nun:

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.AddHeader("content-disposition", string.Format("attachment;filename=export_dealers_{0}_{1:yyyy-MM-dd-HH-mm}.csv; charset=utf-8", countryCode, DateTime.Now)); 
Response.ContentType = "text/csv"; 
Response.AddHeader("Pragma", "public"); 
Response.ContentEncoding = System.Text.Encoding.UTF8; 
Response.BinaryWrite(Encoding.UTF8.GetPreamble()); 
Response.Write(ToCsv(list)); 
Response.Flush(); 
Response.End(); 

Die toCSV Funktion gibt nur einen String mit allen Feldern jeweils in Anführungszeichen, mit einem Semikolon getrennt.

hatten wir es anders vor, hatte aber zusätzliche Codierung von Daten hinzufügen, so dass es die Sonderzeichen nicht verstümmeln auf, wie ç oder ñ ...

Das obige Stück Code exportiert eine CSV-Datei, die scheint korrekt, aber wenn Excel öffnet, und speichert es (auch ohne ein Feld zu ändern) alle Semikolons und Anführungszeichen entfernt werden, und wenn Sie versuchen, die Save as Funktionalität erkennt es als .txt Datei statt CSV zu speichern.

Antwort

0

Dies funktioniert für mich ganz gut:

var lines = new string[10][]; 

var csv = string.Join("\r\n", lines.Select(words => 
       string.Join(",", words.Select(word => 
        "\"" + word.Replace("\"", "\"\"") + "\""))))); 

File.WriteAllText("file.csv", csv); 

Excel liest es in der einfachsten Form.

+0

ich werde das ausprobieren, aber es scheint zu weit zu simpel :), wie wäre es mit Sonderzeichen wie ñ oder ç tun diese Arbeit? weil Französisch und Spanisch und andere Sprachen mit diesen irragulären Zeichen gefüllt sind :) und deshalb mussten wir das ganze Kodierungszeug machen. – Sander

+0

Schließlich speichern Sie es einfach wie eine Textdatei, getrennt durch Kommas und so. Wenn eine Textdatei die Zeichen unterstützt, wird dies auch der CSV, und so wird Excel. – SimpleVar

+0

Hauptunterschied ist, dass wir nicht in einer Datei speichern, sondern es direkt in einem Datenstrom an den Benutzer ausgeben. Dafür müssen wir die Header und die Codierung auf utf8 setzen. Sie speichern es als eine Datei, natürlich können wir das auch versuchen ... Ich werde sehen, was es später am Nachmittag tut – Sander