我采用了一些代码将 DataTable 转换为 CSV 文件。它似乎工作得很好,除非在实际数据中使用逗号。在这种情况下有没有办法显示逗号?这就是我所做的:
StringBuilder sb = new StringBuilder();
IEnumerable<string> columnNames = dtResults.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in dtResults.Rows)
{
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText(saveFileDialog.FileName, sb.ToString());
最佳答案
如果字段包含逗号,则应将其放在双(或单)引号中。
您可以使用 FileHelpers library要创建您的 CSV 文件,它应该注意正确转义。
如果您不想使用该库,最基本的一点是:如果您有逗号,则必须将您的字段放在引号内,例如
ID, NAME
1, "Doe, John"
2, 'Doe, Jane'
如果您的字段包含引号,您应该使用额外的引号将其转义:
3, "Anakin ""Darth Vader"", Skywalker"
4, 'O''Connor, Sinead'
可能的解决方案:
static string CsvEscape(this string value) {
if (value.Contains(",")) {
return "\"" + value.Replace("\"", "\"\"") + "\"";
}
return value;
}
然后在你的代码中:
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString().CsvEscape());
关于c# - 将 DataTable 导出为 CSV 时出现逗号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937984/