C#でDataGridViewに登録されているデータをCSVファイルに出力する方法を解説します。
デザインコード
Windowsフォームアプリのデザインコード「Form1.Designer.cs」になります。
namespace WinFormsApp2
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
button1 = new Button();
Column3 = new DataGridViewTextBoxColumn();
Column2 = new DataGridViewTextBoxColumn();
Column1 = new DataGridViewTextBoxColumn();
dataGridView1 = new DataGridView();
((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit();
SuspendLayout();
//
// button1
//
button1.Location = new Point(12, 12);
button1.Name = "button1";
button1.Size = new Size(116, 44);
button1.TabIndex = 0;
button1.Text = "button1";
button1.UseVisualStyleBackColor = true;
button1.Click += button1_Click;
//
// Column3
//
Column3.HeaderText = "カラム3";
Column3.Name = "Column3";
//
// Column2
//
Column2.HeaderText = "カラム2";
Column2.Name = "Column2";
//
// Column1
//
Column1.HeaderText = "カラム1";
Column1.Name = "Column1";
//
// dataGridView1
//
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.Columns.AddRange(new DataGridViewColumn[] { Column1, Column2, Column3 });
dataGridView1.Location = new Point(12, 62);
dataGridView1.Name = "dataGridView1";
dataGridView1.Size = new Size(600, 247);
dataGridView1.TabIndex = 1;
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(624, 321);
Controls.Add(dataGridView1);
Controls.Add(button1);
Name = "Form1";
Text = "Form1";
Load += Form1_Load;
((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit();
ResumeLayout(false);
}
#endregion
private Button button1;
private DataGridViewTextBoxColumn Column3;
private DataGridViewTextBoxColumn Column2;
private DataGridViewTextBoxColumn Column1;
private DataGridView dataGridView1;
}
}
ソースコード
DataGridViewに登録されているデータを、CSV形式のファイルに出力するソースコードです。
using System.Text;
using System.Windows.Forms;
namespace WinFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 列(カラム)数の設定
dataGridView1.ColumnCount = 3;
// ヘッダーテキストの設定
dataGridView1.Columns[0].HeaderText = "カラム1";
dataGridView1.Columns[1].HeaderText = "カラム2";
dataGridView1.Columns[2].HeaderText = "カラム3";
// 行の追加
dataGridView1.Rows.Add("11", "12", "13");
dataGridView1.Rows.Add("21", "22", "23");
dataGridView1.Rows.Add("31", "32", "33");
}
private void button1_Click(object sender, EventArgs e)
{
// 出力するCSVファイルのパス
string csvPath = @"C:\Workspace\output.csv";
// CSVファイルの出力
ExportDataGridViewToCsv(dataGridView1, csvPath);
}
public static void ExportDataGridViewToCsv(DataGridView dataGridView, string filePath)
{
// CSVへの出力情報
StringBuilder csvContent = new();
// ヘッダーを追加
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
csvContent.Append(dataGridView.Columns[i].HeaderText);
if (i < dataGridView.Columns.Count - 1)
{
csvContent.Append(',');
}
}
csvContent.AppendLine();
// 各行のデータを追加
foreach (DataGridViewRow row in dataGridView.Rows)
{
// 新しい行をスキップ
if (row.IsNewRow) continue;
for (int i = 0; i < dataGridView.Columns.Count; i++)
{
// セルの値を取得
var value = row.Cells[i].Value?.ToString() ?? string.Empty;
csvContent.Append(value);
if (i < dataGridView.Columns.Count - 1)
{
csvContent.Append(',');
}
}
csvContent.AppendLine();
}
// CSVファイルに書き込み
File.WriteAllText(filePath, csvContent.ToString());
}
}
}
32行目で出力するCSVファイルを指定します。
38~74行目で、DataGridViewのデータを読み込み、CSVファイルに書き込んでいます。
55行目のforeachでは、ループ回数が1回多いため、新しい行(データが入っていない行)が、CSVファイルに出力されてしまいます。
これを防止するため、58行目にスキップする処理を入れています。
こちらをベースにエラー処理やファイルの上書き防止など、色々カスタマイズして頂ければと思います。
実行イメージ
DataGridViewの登録データを出力後のCSVファイルのイメージです。
以下は、DataGridViewです。
ボタンをクリックすることで、CSVへの書き込み処理が実行されます。

以下は、出力されたCSVファイルです。
カラム1,カラム2,カラム3 11,12,13 21,22,23 31,32,33
リンク
コメント