2012-10-22 94 views
1

我想導出爲CSV,但是我面對的問題是當網格視圖中包含的數據包含逗號時。由於使用了「,」作爲分隔符,這導致了csv中的各種問題。以下是代碼。任何想法如何我可以避免這一點?當數據包含逗號時從Gridview導出爲CSV

try 
     { 
      System.IO.StreamWriter csvFileWriter = new StreamWriter(CsvFpath, false); 

      string columnHeaderText = ""; 

      int countColumn = dataGridViewLogging.ColumnCount - 1; 

      if (countColumn >= 0) 
      { 
       columnHeaderText = dataGridViewLogging.Columns[0].HeaderText; 
      } 

      for (int i = 1; i <= countColumn; i++) 
      { 
       columnHeaderText = columnHeaderText + ',' + dataGridViewLogging.Columns[i].HeaderText; 
      } 


      csvFileWriter.WriteLine(columnHeaderText); 

      foreach (DataGridViewRow dataRowObject in dataGridViewLogging.Rows) 
      { 
       if (!dataRowObject.IsNewRow) 
       { 
        string dataFromGrid = ""; 

        dataFromGrid = dataRowObject.Cells[0].Value.ToString(); 

        for (int i = 1; i <= countColumn; i++) 
        { 
         dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString(); 

         csvFileWriter.WriteLine(dataFromGrid); 
        } 
       } 
      } 
+1

更改分隔符';'和'設置=九月;'首先在CSV文件可以工作。 –

+1

用雙引號將字段換行,該引號可以包含逗號並使用[可用的csv分析器](http://msdn.microsoft.com/zh-cn/library/microsoft.visualbasic.fileio.textfieldparser.aspx)而不是執行此操作手動。 –

+0

你能不能簡單地使用一個不同的不常用的字符作爲分隔符,比如''',要麼將這些有問題的文本包裝進'''''這應該可以被大多數應用程序解析。 –

回答

0

使用轉義字符,並使用理解如何處理轉義的解析器。您可以快速地編寫一個逃生()擴展和UNESCAPE()擴展....

public static class ExtentionClass 
{ 
    public static string Escape(this string str) 
    { 
      return str.Replace("\\","\\\\").Replace(",","\\,"); 
    } 
    public static string Unescape(this string str) 
    { 
      return str.Replace("\\\\","\\").Replace("\\,",","); 
    } 
} 

現在你可以改變你的行...

dataFromGrid = dataFromGrid + ',' + dataRowObject.Cells[i].Value.ToString().Escape(); 

但是,你可能想在Excel中查看輸出,然後\不起作用...它需要雙引號。

... 
    public static string Escape(this string str) 
    { 
     return "\"" + str.Replace("\"","\"\"") + "\""; 
    } 

你可以閱讀更多的... CSV for Excel, Including Both Leading Zeros and Commas

0

您可以使用任何庫導出爲CSV。

相關問題