C# DataTableをCSVに書き込む

DataTableをCSVに書き込むクラスファイルを作成しました。

 

スポンサーリンク

 

 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Microsoft.VisualBasic.FileIO;

namespace Sample
{
    class Csv
    {
        System.Text.Encoding encord = System.Text.Encoding.GetEncoding("Shift_JIS");

        /// <summary>
        /// データテーブルをCSVに出力します.
        /// </summary>
        /// <param name="dt">DataTable</param>
        /// <param name="path">書き込みディレクトリパス</param>
        /// <param name="filename">ファイル名</param>
        /// <param name="save">false=上書き true=追記</param>
        public void CsvWriter(DataTable dt, string path, string filename,bool save)
        {
            // ファイルオープン
            System.IO.StreamWriter sr = new System.IO.StreamWriter(path + filename, save, encord);

            // カラム名を出力
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                sr.Write(dt.Columns[i].Caption);

                if (i < dt.Columns.Count - 1)
                {
                    sr.Write(",");
                }

            }

            // 改行
            sr.Write("\r\n");

            // レコードを出力
            for (int row = 0; row < dt.Rows.Count; row++)
            {
                for (int col = 0; col < dt.Columns.Count; col++)
                {
                    sr.Write(dt.Rows[row][col].ToString());

                    if (col < dt.Columns.Count - 1)
                    {
                        sr.Write(",");
                    }
                }
                // 改行
                sr.Write("\r\n");
            }

            // 改行
            sr.Write("\r\n");
            // ファイルクローズ
            sr.Close();

        }
    }
}

StreamWriterクラス

StreamWriterクラスを利用するために「using Microsoft.VisualBasic.FileIO;」のアセンブリを用意します。

エンコード

System.Text.Encoding encord = System.Text.Encoding.GetEncoding(“Shift_JIS”);

エンコードは、shift_jisを指定しています。

CsvWriterメソッド

CsvWriterメソッドは自作です。このメソッドを呼び出す際に以下のパラメータを設定するようにしています。

public void CsvWriter(DataTable dt, string path, string filename,bool save)

dt      :CSVに出力するDataTable
path    :CSVを出力する場所
filename :CSVの出力名称
save    :false=上書き true=追記

最初にDataTableのカラム名をカンマ区切りでCSVに出力しています。

同じようにレコードデータもカンマ区切りで1行ずつCSVに出力しています。

最後にClose()メソッドを使って書き込みファイルを閉じて終了です。

スポンサーリンク

SNSでもご購読できます。

コメントを残す