Attached image represents sample datatable这是我将数据表转换为CSV的代码。在我的行中,值包含许多逗号。因此,使用逗号分隔符创建CSV时,值显示未定义的格式
StringBuilder tempsb = new StringBuilder();
IEnumerable<string> columnNames = table.Columns.Cast<DataColumn>().
Select(column => column.ColumnName);
tempsb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in table.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
tempsb.AppendLine(string.Join(",", fields));
}
File.WriteAllText("sample.csv", tempsb.ToString());
答案 0 :(得分:2)
在CSV文件中,当某个字段中出现,
时,该字段需要用双引号括起来。如果某个字段包含双引号,则双引号应加倍。
所以你需要像这样创建你的字段:
IEnumerable<string> fields = row.ItemArray
.Select(field => field.ToString().Contains(",") || field.ToString().Contains("\"")
? String.Format("\"{0}\"", field.ToString().Replace("\"", "\"\""))
: field.ToString());
答案 1 :(得分:0)
我建议使用Chrisi在您的问题评论中提供的第二或第三个选项,但是,为了回答问题,您可以使用第一个选项:
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString().Replace(",", myReplacementString);
替换字符串可能是string.Empty
,HTML编码值或其他任何内容。