2017-05-31 1 views
0

Ich habe diesen Code in meiner Anwendung verwendet, um Datagridview als CSV-Datei zu exportieren.Es hat gut funktioniert, aber csv zeigt Zellenwerte nicht korrekt.Siehe unten Bilder und ich habe auch meinen Code eingefügt.Was kann ich an diesem Code ändern, um dies zu beheben ?Warum zeigt die CSV-Datei beim Export keine Sonderzeichen?

ist die Datagridview

enter image description here

Dies ist die exportierte CSV und es zeigt, wie diese

enter image description here

Hier ist mein Code

public void writeCSV(DataGridView gridIn, string outputFile) 
    { 

     //test to see if the DataGridView has any rows 
     if (gridIn.RowCount > 0) 
     { 
      string value = ""; 
      DataGridViewRow dr = new DataGridViewRow(); 
      StreamWriter swOut = new StreamWriter(outputFile); 


      //write header rows to csv 
      for (int i = 0; i <= gridIn.Columns.Count - 1; i++) 
      { 
       if (i > 0) 
       { 
        swOut.Write(","); 
       } 
       swOut.Write(gridIn.Columns[i].HeaderText); 
      } 

      swOut.WriteLine(); 

      //write DataGridView rows to csv 
      for (int j = 0; j <= gridIn.Rows.Count - 2; j++) 
      { 
       if (j > 0) 
       { 
        swOut.WriteLine(); 
       } 

       dr = gridIn.Rows[j]; 

       for (int i = 0; i <= gridIn.Columns.Count - 1; i++) 
       { 
        if (i > 0) 
        { 
         swOut.Write(","); 
        } 

        value = dr.Cells[i].Value.ToString(); 
        //replace comma's with spaces 
        value = value.Replace(',', ' '); 
        //replace embedded newlines with spaces 
        value = value.Replace(Environment.NewLine, " "); 

        swOut.Write(value); 
       } 
      } 
      swOut.Close(); 
     } 
    } 
+0

Sie konnten die CSV in Notepad öffnen? Ich wette, es ist exzellent, die numerischen Werte zu zerstören. –

+0

Suchen Sie die Stückliste (Byte-Reihenfolge-Markierung), und beachten Sie, dass der Unterschied in der numerischen Genauigkeit der Unterschied zwischen Excel und Ihrer Anwendung ist. Siehe [this] (http://www.techrepublic.com/article/displaying-values-with-more-than-12-characters-in-excel/) für weitere Informationen. – john

Antwort

3

Sie müssen setze die Kodierung des S treamWriter:

StreamWriter swOut = new StreamWriter(outputFile, System.Text.Encoding.UTF8); 

Zum Beispiel UTF-8.

Und die Nummer 5.027E + 13 nur in Excel angezeigt. Sie können das Textformat der Zellen in Zahl ändern und Excel zeigt Ihnen den Wert an. Oder öffne die CSV-Datei im Editor und du wirst sehen, dass die Zahlen stimmen.

+1

Danke das funktioniert – user1353519

0

Sie müssen die richtige Textkodierung, wenn die Daten in CSV-Datei zu exportieren, wie System.Text.Encoding.UTF8

0
StreamWriter swOut = new StreamWriter(outputFile, System.Text.Encoding.UTF8); 
+0

Gleiche Antwort von @NikBo –

Verwandte Themen