Public Sub SaveToCsv(table As DataTable, csvFilePath As String) 'String 型へ変換するためのヘルパー。Nothing や DBNull も "" に変換してくれる。 '相手が数値や日付の場合、既定の書式で文字列化される点にだけ注意。 Static toStr As Func(Of Object, String) = Function(o) String.Format("{0}", o) 'CSV 出力のために両端を「"」で囲むためのヘルパー。 'データ中に「"」が含まれていた場合のエスケープ処理も行います。 Static escapeCsv As Func(Of Object, String) = Function(o) """" & toStr(o).Replace("""", """""") & """" 'ヘッダーの生成 Dim sb As New System.Text.StringBuilder() sb.Append(String.Join(",", table.Columns.OfType(Of DataColumn).Select(Function(c) escapeCsv(c.ColumnName)))) 'ファイルの内容 For Each row As DataRow In table.Rows sb.AppendLine().Append(String.Join(",", row.ItemArray.Select(escapeCsv))) Next 'ファイルに出力 System.IO.File.WriteAllText(csvFilePath, sb.ToString(), System.Text.Encoding.UTF8) End Sub
'ファイルの内容 For Each row As DataRow In table.Rows Dim items() As Object = row.ItemArray '第2列すなわち items(1) の中に '「,」という半角文字が含まれていたら '「,」の全角文字に置き換えておく items(1) = toStr(items(1)).Replace(","c, ","c) 'sb.AppendLine().Append(String.Join(",", row.ItemArray.Select(escapeCsv))) sb.AppendLine().Append(String.Join(",", items.Select(escapeCsv))) Next