2015-10-05 85 views
0

我寫了一個將DataTable寫入CSV文件的方法,如下所示;分隔符解決方法CSV C#

public void writeToCSV(DataTable dt) 
    { 
     StringBuilder sb = new StringBuilder(); 
     IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>(). 
              Select(column => column.ColumnName); 
     sb.AppendLine(string.Join(",", columnNames)); 

     foreach (DataRow row in dt.Rows) 
     { 
      IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString()); 
      sb.AppendLine(string.Join(",", fields)); 
     } 
     File.WriteAllText("C:\\xampp\\mysql\\data\\sdcdbftest\\test.csv", sb.ToString()); 
     MessageBox.Show("Success"); 
    } 

此寫入CSV文件罰款,但問題是,當我們的用戶之一,我從建立數據表中的一個字段輸入了逗號。 Excel將此作爲新列,並且在寫入Excel時,所有數據都會在錯誤的地方出現。

我已經嘗試使用分號而不是逗號,但迄今爲止還沒有工作。其中一種方法是使用分號作爲附加的字符寫入.txt文件,然後在Excel中打開它,當然選擇分號作爲分隔符。

雖然這是一種解決方法,我寧願不讓用戶每次打開excel文件時都這樣做。有沒有解決方法?

+5

不要重新發明輪子。使用庫來編寫CSV。 – CodeCaster

+0

@CodeCaster你能建議一個庫來使用嗎? – CBreeze

+0

字符串連接在某些情況下不起作用。 CSV文件有標準,必須遵循這些RFC標準。完成簡單庫的最簡單方法是在掃描數據期間使用Flags,並且在遇到分隔符類型時應該打開數據部分的標誌。基本上,你需要逐字閱讀字符才能完成一個好的CSV閱讀器。 – Hozikimaru

回答

0

您需要分隔您的CSV字段。如果一個字段包含保留字符,那麼你需要用雙引號將它包起來,例如「我的新領域」。此外,如果字段值本身包含雙引號,則需要使用額外的雙引號進行分隔。

2

您可以使用雙引號"來轉義包含逗號和新行的列。

來源:wikipedia