データの保存にデータテーブルを使用しています。
データをデータテーブルからCSVファイルにエクスポートしています。
場合によっては、コンマ(,
)を含む値が存在する可能性があるため、値は正しくエクスポートされません。
値が"9,11,32"
であることを考慮してください。そのようにエクスポートする必要があります。
しかし、最初の列を9
にすると、次の列は11
になります。
CSVファイルの同じ列に9,11,32
を表示したい。それ、どうやったら出来るの?
"\" "+ yourdata +"\""のように、バックスラッシュ内にデータを置くだけです。以下の例を見てください。
StringWriter csv = new StringWriter();
// Generate header of the CSV file
csv.WriteLine(string.Format("{0},{1}", "Header 1", "Header 2"));
// Generate content of the CSV file
foreach (var item in YourListData)
{
csv.WriteLine(string.Format("{0},{1}", item.Data1, "\"" + item.Data2 + "\""));
}
return File(new System.Text.UTF8Encoding().GetBytes(csv.ToString()), "application/csv", string.Format("{0}{1}", "YourFileName", ".csv"));
この例では、data2にカンマ「、」が含まれている可能性があります
embedded commas
を含むフィールドは、二重引用符で区切る必要があります。
フィールド:
abc, xyz
pqr
csvバージョン:
"abc, xyz" , pqr
double quote
文字を含むフィールドは二重引用符で囲む必要があり、埋め込まれた二重引用符はそれぞれ、連続する二重引用符のペアで表す必要があります。
フィールド:
Welcome to "My World"
csvバージョン:
"Welcome to ""My World"""
データにカンマがある場合、csvに入力する必要があります http://tools.ietf.org/html/rfc418 は、引用符を次のように使用するように指示しています:
"123,56","A dog, cat and a frog"
StringBuilder sb = new StringBuilder();
foreach (DataColumn col in dt.Columns)
{
if (col.ColumnName.Contains(","))
{
sb.Append(String.Format("\"{0}\",", col.ColumnName));
}
else
{
sb.Append(String.Format("{0},", col.ColumnName));
}
}
カンマで区切られた値の単一の列を持つcsvを作成するには、スペースなしで二重引用符の間にカンマで区切られた値を記述します。
例私は2つの列Code&Description With Values Code01&Val1、Val2、Valを持っています。特定のデータでcsvを作成するには、メモ帳で行の下に書き込み、csv拡張子を付けて保存します。
Code,Description
Code01,"Val1,Val2,Val3"
値を二重引用符で囲みます。
string ValueToEscape = "a,b";
"\"" + ValueToEscape + "\""
CSV出力= a、b