DatatableをCsvファイルへ出力方法を教えてください

タグの編集
投稿者 ヤマダ  (社会人) 投稿日時 2022/6/21 13:52:22
VB初心者です。
DatatableをCsvファイルへ出力方法を教えてください。
出力する際にReplseしたい項目があるのでセルを一つづつ出力したいです。
よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/6/21 19:11:17
> DatatableをCsvファイルへ出力方法を教えてください。
直接変換する方法は無いですね。
そのまま文字列連結して変換してあげてください。

手抜き実装ですが、変換例を書いてみました。
Public Sub SaveToCsv(table As DataTable, csvFilePath As String)
    'String 型へ変換するためのヘルパー。Nothing や DBNull も "" に変換してくれる。 
    '相手が数値や日付の場合、既定の書式で文字列化される点にだけ注意。 
    Static toStr As Func(Of ObjectString) = Function(o) String.Format("{0}", o)

    'CSV 出力のために両端を「"」で囲むためのヘルパー。 
    'データ中に「"」が含まれていた場合のエスケープ処理も行います。 
    Static escapeCsv As Func(Of ObjectString) = 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