CODE-Save ADO.NET DataTable As CSV

之前寫過將CSV檔案內容轉換成ADO.NET DataTable物件,今天的需求剛好反過來,要將DataTable的內容匯出成CSV,邏輯上簡單許多,但還是PO文一篇,下回需要時比較好找。

static string Quoted(string v) {
    return "\"" + v.Replace(@"""", @"""""") + "\"";
}
 
static void SaveDataTableAsCSV(DataTable t, string csvPath)
{
    StringBuilder sb = new StringBuilder();
    List<string> l = new List<string>();
    foreach (DataColumn c in t.Columns)
        l.Add(Quoted(c.ColumnName));
    sb.AppendLine(string.Join(",", l.ToArray()));
    foreach (DataRow r in t.Rows)
    {
        l.Clear();
        for (int i = 0; i < t.Columns.Count; i++)
            l.Add(Quoted(r[i].ToString()));
        sb.AppendLine(string.Join(",", l.ToArray()));
    }
    File.WriteAllText(csvPath, sb.ToString(), Encoding.UTF8);
}

註:

  1. File.WriteAllText時要加註Encoding.UTF8以確定輸出檔案會包含BOM檔頭,Excel才能正確開啟。
  2. 測試發現,欄位內容值即使包含換行符號,也能被Excel正確解析,讓我驚喜了一下。
Published 28 January 2010 07:02 PM 由 Jeffrey
Filed under:


意見

# jain said on 28 January, 2010 05:38 PM

這篇好用,謝謝分享!

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 

請輸入以上的數字:

搜尋

Go

<January 2010>
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456
 
RSS
【工商服務】
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


BlogLook Score and Rank

Syndication