C# で DataTable を CSV に変換する
この記事では、C# を使用して DataTable を CSV ファイルに変換する方法について説明します。まず、CSV とは何かを知る必要があるので、CSV に取り掛かりましょう。
CSV ファイルとも呼ばれるカンマ分割値のデータは、スペースではなくコンマでそれぞれの列に区切られます。CSV ファイルのもう 1つの使用法は、データが Excel の適切なセルに自動的に配置されたら、すぐに Excel でファイルを開くことです。
C#
で DataTable を CSV に変換する
DataTable を CSV ファイルに変換する最初のステップは、DataTable を作成することです。そのための手順は、次の段落で概説されています。
DataTable を作成して入力する
-
最初に、次のライブラリをインポートする必要があります。
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks;
-
戻り値として DataTable を生成する
CreateData()
というメソッドを使用して、datacreation
という名前のクラスを作成しました。public static class datacreation { public static DataTable CreateData() {} }
-
データ入力から始めるために、
CreateData()
にdt
という名前のDataTable
オブジェクトを作成する必要があります。DataTable dt = new DataTable();
-
オブジェクトが初期化されたら、次のステップは DataTable
dt
にデータ列を追加することです。Rollnum
、Firstname
、Lastname
、およびSubject
フィールドが含まれており、必要な他の領域を自由に追加できます。dt.Columns.Add("RollNum", typeof(int)); dt.Columns.Add("Firstname", typeof(string)); dt.Columns.Add("Lastname", typeof(string)); dt.Columns.Add("Subjects", typeof(string));
-
次に、これらの列またはフィールドに情報を入力します。
dt.Rows.Add(3227, "Zeeshan", "Khan", "C#"); dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java"); dt.Rows.Add(3247, "Osama", "shanii", "C++"); dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python"); dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db"); dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl"); dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP"); dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
-
CreateData()
関数は、DataTable タイプのテーブルを返します。return dt;
C#
で DataTable を CSV に変換する
DataTable を作成したら、次のステップは、DataTable を CSV に変換するコードを作成することです。
-
implementCSV
クラスにConvertTocsv
という新しいメソッドを追加しました。変数dt
とpath
は、それが取るパラメーターです。public static class implementCSV { public static void ConvertTocsv(this DataTable dt, string path) {} }
-
ConvertTocsv
メソッドで、s
と呼ばれるStreamWriter
オブジェクトを作成しました。これは、指定されたパスにデータを書き込みます。StreamWriter s = new StreamWriter(path, false);
-
for
ループを使用して、各列の間にコンマを挿入することにより、DataTable からデータを分割します。for (int i = 0; i < dt.Columns.Count; i++) { s.Write(dt.Columns[i]); if (i < dt.Columns.Count - 1) { s.Write(","); } } s.Write(s.NewLine);
-
続いて、
foreach
ループを利用します。このループは、DataTabledt
からコンマを使用してデータを書き込みます。foreach (DataRow dr in dt.Rows) { for (int i = 0; i < dt.Columns.Count; i++) { if (!Convert.IsDBNull(dr[i])) { string value = dr[i].ToString(); if (value.Contains(',')) { value = String.Format("\"{0}\"", value); s.Write(value); } else { s.Write(dr[i].ToString()); } } if (i < dt.Columns.Count - 1) { s.Write(","); } } s.Write(s.NewLine); }
完全なソースコード
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DataTableExport {
public static class datacreation {
public static DataTable CreateData() {
DataTable dt = new DataTable();
dt.Columns.Add("RollNum", typeof(int));
dt.Columns.Add("Firstname", typeof(string));
dt.Columns.Add("Lastname", typeof(string));
dt.Columns.Add("Subjects", typeof(string));
dt.Rows.Add(3227, "Zeeshan", "Khan", "C#");
dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java");
dt.Rows.Add(3247, "Osama", "shanii", "C++");
dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python");
dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db");
dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl");
dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP");
dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
return dt;
}
}
public static class implementCSV {
public static void ConvertTocsv(this DataTable dt, string path) {
StreamWriter s = new StreamWriter(path, false);
for (int i = 0; i < dt.Columns.Count; i++) {
s.Write(dt.Columns[i]);
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
foreach (DataRow dr in dt.Rows) {
for (int i = 0; i < dt.Columns.Count; i++) {
if (!Convert.IsDBNull(dr[i])) {
string value = dr[i].ToString();
if (value.Contains(',')) {
value = String.Format("\"{0}\"", value);
s.Write(value);
} else {
s.Write(dr[i].ToString());
}
}
if (i < dt.Columns.Count - 1) {
s.Write(",");
}
}
s.Write(s.NewLine);
}
s.Close();
}
}
}
Windows フォームを作成する
DataTable にデータを作成し、コンマを使用してデータを区切った後、次のステップは、データを表示して .csv
形式に変換できる Windows フォームを作成することです。
-
開始するには、以下に示すように Windows フォームを作成し、その中に
DataGridView
とConvert data to CSV
というボタンを配置します。作成されたデータを表示するDataGridView
と DataTable を CSV に変換するボタンが含まれています。 -
Windows フォームの実行が終了すると、次のようになります。
Windows フォームのコードを書く
Windows フォームを作成したら、次のステップは、Convert data to CSV
ボタンのコードを記述することです。
-
以下にリストされているメソッドを呼び出して、オブジェクトを初期化し、データを入力します。
DataTable dt = datacreation.CreateData();
-
OpenSavefileDialog()
を使用して、指定した名前でファイルを保存できます。string filename = OpenSavefileDialog();
-
ConvertTocsv
は、作成したデータから CSV ファイルを作成するために使用されます。dt.ConvertTocsv(filename);
Windows フォームのソースコード
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
DataTable dt = datacreation.CreateData();
dataGridView1.DataSource = dt;
}
private void btnCSV_Click(object sender, EventArgs e) {
DataTable dt = datacreation.CreateData();
string filename = OpenSavefileDialog();
dt.ConvertTocsv(filename);
}
private string OpenSavefileDialog() {
string filename = null;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "csv File|*.csv";
saveFileDialog.Title = "Save";
DialogResult dialogResult = saveFileDialog.ShowDialog();
if (dialogResult == DialogResult.OK) {
filename = saveFileDialog.FileName;
}
return filename;
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn関連記事 - Csharp CSV
- C# で CSV ファイルにデータを書き込む
- C# で CSV ファイルを読み込み、その値を配列に格納する
- C# で CSV ファイルを DataTable に読み込む
- C# で CSV ファイルを解析する