2015/03/28

C#.Net DataTable to CSV File


using System;
using System.Data;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace Sample
{
    public partial class Form1 : Form
    {
        private readonly String[] Headers = { "姓名", "座號", "國文成績" };
        private readonly String[] Users = { "王小明", "陳大吉", "洪船長" };
        private readonly int[] CH_Score = { 57, 80, 92 };
        private readonly int MAX = 3;
        private DataTable table = new DataTable();
        public Form1()
        {
            InitializeComponent();
            table.Columns.Add("Header");
            table.Columns.Add("User");
            table.Columns.Add("Score");
        }


        private void button1_Click(object sender, EventArgs e)
        {
            for (int index = 0; index < MAX; index++)
            {
                DataRow row = table.NewRow();
                row["Header"] = Headers[index];
                row["User"] = Users[index];
                row["Score"] = CH_Score[index];
                table.Rows.Add(row);
            }

            DataTableToCSV(table);
        }

        private void DataTableToCSV(DataTable table)
        {
            StringBuilder builder = new StringBuilder();

            foreach (var row in table.AsEnumerable())
            {
                int maxLength = row.ItemArray.Length;
                for (int index = 0; index < maxLength; index++)
                    if (index == maxLength - 1)
                        builder.Append(String.Format("{0}{1}",row.ItemArray[index],Environment.NewLine));
                    else
                        builder.Append(String.Format("{0},", row.ItemArray[index]));           
            }

            File.WriteAllText(String.Format("{0}\\{1}.csv", Directory.GetCurrentDirectory(), DateTime.Now.Ticks),
                builder.ToString(), Encoding.UTF8);
        }
    }
}


執行結果:


參考資料:
http://en.wikipedia.org/wiki/Comma-separated_values