DatatableをCsvファイルへ出力方法を教えてください
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2022/6/21 19:11:17
> DatatableをCsvファイルへ出力方法を教えてください。
直接変換する方法は無いですね。
そのまま文字列連結して変換してあげてください。
手抜き実装ですが、変換例を書いてみました。
> Replseしたい項目
「Replase」したい内容にもよりますが、たとえば
直接変換する方法は無いですね。
そのまま文字列連結して変換してあげてください。
手抜き実装ですが、変換例を書いてみました。
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
> Replseしたい項目
「Replase」したい内容にもよりますが、たとえば
「データ中の "," を "," に置き換える」
のような事をしたいのであれば、データ出力前に Replace を呼び出しておけばよいかと思います。'ファイルの内容
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
DatatableをCsvファイルへ出力方法を教えてください。
出力する際にReplseしたい項目があるのでセルを一つづつ出力したいです。
よろしくお願いします。