C#.NETのサンプルコードを掲載しています。
      
DataTableからCSVファイルを作成する
DataTableの内容をCSV形式にしてファイル保存します。
このサンプルは値を出力するカラムの型を予め決めています。
定義している型は値を出力しますが、それ以外は[データ]という文字列を出力します。

サンプルコード
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Xml.Serialization;
using System.IO;

namespace dst
{
    public class dst024
    {
        /// <summary>
        /// DataTableからCSVファイルを作成します。
        /// </summary>
        /// <param name="dt">データテーブル</param>
        /// <param name="filePath">ファイルパス</param>
        /// <param name="header">ヘッダーを出力するかどうか true:出力する false:出力しない</param>
        static public void DataTableToCsv(DataTable dt, string filePath, bool header)
        {
            string sp = string.Empty;
            List<int> filterIndex = new List<int>();

            using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.GetEncoding("Shift_JIS")))
            {
                //----------------------------------------------------------//
                // DataColumnの型から値を出力するかどうか判別します         //
                // 出力対象外となった項目は[データ]という形で出力します     //
                //----------------------------------------------------------//
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    switch (dt.Columns[i].DataType.ToString())
                    {
                        case "System.Boolean":
                        case "System.Byte":
                        case "System.Char":
                        case "System.DateTime":
                        case "System.Decimal":
                        case "System.Double":
                        case "System.Int16":
                        case "System.Int32":
                        case "System.Int64":
                        case "System.SByte":
                        case "System.Single":
                        case "System.String":
                        case "System.TimeSpan":
                        case "System.UInt16":
                        case "System.UInt32":
                        case "System.UInt64":
                            break;

                        default:
                            filterIndex.Add(i);
                            break;
                    }
                }
                //----------------------------------------------------------//
                // ヘッダーを出力します。                                   //
                //----------------------------------------------------------//
                if (header)
                {
                    foreach (DataColumn col in dt.Columns)
                    {
                        sw.Write(sp + "\"" + col.ToString().Replace("\"", "\"\"") + "\"");
                        sp = ",";
                    }
                    sw.WriteLine();
                }
                //----------------------------------------------------------//
                // 内容を出力します。                                       //
                //----------------------------------------------------------//
                foreach (DataRow row in dt.Rows)
                {
                    sp = string.Empty;
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        if (filterIndex.Contains(i))
                        {
                            sw.Write(sp + "\"[データ]\"");
                            sp = ",";
                        }
                        else
                        {
                            sw.Write(sp + "\"" + row[i].ToString().Replace("\"", "\"\"") + "\"");
                            sp = ",";
                        }
                    }
                    sw.WriteLine();
                }
            }
        }
    }
}

呼び出しもとのソースはこちら。
呼び出し元
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

private void button3_Click(object sender, EventArgs e)
{
    DataTable dt = new DataTable();

    // 4列定義します。
    dt.Columns.Add("A", typeof(string));
    dt.Columns.Add("B", typeof(int));
    dt.Columns.Add("C", typeof(DateTime));
    dt.Columns.Add("D", typeof(Bitmap));

    // 4行追加します。
    for (int i = 0; i < 4; i++)
    {
        DataRow row = dt.NewRow();
        row["A"] = "文字列を格納します。";
        row["B"] = i;
        row["C"] = DateTime.Now;
        dt.Rows.Add(row);
    }

    dt.TableName = "Table1";
    dst024.DataTableToCsv(dt, "dst024.csv", true);
}
出力したファイルの内容はこちら
DataTableからCSVファイルを作成する

      








Copyright (C) 2011 - 2017 猫の気ままなC#日記