DataGridView CSV出力(C#/VB.NET)
2010年01月27日
DataGridViewをCSVファイルに出力(保存)するメソッドを追加するサンプル(ソース/コード)です。こちらの DataGridViewに便利なメソッドを追加するサンプル にメソッドを追加してお試し頂けます。VS-FlexGrid等にはCSV出力機能が付いているのでDataGridViewにもCSV出力機能が欲しいと思います。少し修正すればこのサンプルだけで使用出来ます。DataGridViewに便利なメソッドを追加するその他のサンプルはこちらです。
DataGridView EXCEL読込(C#/VB.NET)
DataGridView EXCEL出力(C#/VB.NET)
DataGridView CSV読込(C#/VB.NET)
DataGridView HTML出力(C#/VB.NET)
DataGridView その他のサンプルソース
' -----------------------------------------------------------
' DataGridViewをCSV出力するサンプル(VB.NET/VS2005)
Public Sub SaveCsv(ByVal fp As String)
' CSVファイルオープン
Dim sw As IO.StreamWriter = _
New IO.StreamWriter(fp, False, _
System.Text.Encoding.GetEncoding("SHIFT-JIS"))
For r As Integer = 0 To Me.Rows.Count - 1
For c As Integer = 0 To Me.Columns.Count - 1
' DataGridViewのセルのデータ取得
Dim dt As String = ""
If Me.Rows(r).Cells(c).Value _
Is Nothing = False Then
dt = Me.Rows(r).Cells(c).Value.ToString()
End If
If c < Me.Columns.Count - 1 Then
dt = dt & ","
End If
' CSVファイル書込
sw.Write(dt)
Next
sw.Write(vbCrLf)
Next
' CSVファイルクローズ
sw.Close()
End Sub
' -----------------------------------------------------------
// ----------------------------------------------------------
// DataGridViewをCSV出力するサンプル(C#.NET/VS2005)
public void SaveCsv(String fp)
{
// CSVファイルオープン
StreamWriter sw =
new StreamWriter(fp, false,
System.Text.Encoding.GetEncoding("SHIFT-JIS"));
for (int r = 0; r <= this.Rows.Count - 1; r++)
{
for (int c = 0; c <= this.Columns.Count - 1; c++)
{
// DataGridViewのセルのデータ取得
String dt = "";
if (this.Rows[r].Cells[c].Value != null)
{
dt = this.Rows[r].Cells[c].Value.
ToString();
}
if (c < this.Columns.Count - 1)
{
dt = dt + ",";
}
// CSVファイル書込
sw.Write(dt);
}
sw.Write("\n");
}
// CSVファイルクローズ
sw.Close();
}
// ----------------------------------------------------------
コメント
参考までに
記載されているコードではstring変数が大量(セル数*3個)に作られてしまいパフォーマンス的に非常に不利です。
私も必要があって同様のコードを作成しましたので参考までに掲載します。
//---------------- 以下は引用 -----------------------
文字列は、テキストを表現するために使用される Unicode 文字のシーケンシャル コレクションです。String オブジェクトは、文字列を表す System.Char オブジェクトのシーケンシャル コレクションです。String オブジェクトの値はシーケンシャル コレクションの内容であり、この値は変更できません。
参考URL;http://msdn.microsoft.com/ja-jp/library/system.string(v=vs.80).aspx
using (StreamWriter sw = new StreamWriter(dlg.FileName, false, System.Text.Encoding.GetEncoding("SHIFT-JIS")))
{
for (int r = 0; r < grid.Rows.Count; r++)
{
StringBuilder dt = new StringBuilder(); //<- コンストラクタ引数は環境により適宜設定
for (int c = 0; c < grid.Columns.Count; c++)
{
if (grid[c, r].Value != null)
dt.Append(grid[c, r].Value.ToString());
if (c < grid.Columns.Count - 1)
dt.Append(",");
}
sw.Write(dt.ToString() + System.Environment.NewLine);
}
}
以上。
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます