Visual Basic 中学校 掲示板
投稿内容
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
>
投稿一覧
>
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
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