c# - 将 DataTable 导出为 CSV 时出现逗号问题

标签 c# .net wpf csv export-to-csv

我采用了一些代码将 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());

附言:根据Wikipedia没有真正的 csv 规范,但是 RFC 4180描述了一种经常使用的格式。

关于c# - 将 DataTable 导出为 CSV 时出现逗号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937984/

相关文章:

c# - 依赖属性绑定(bind)和更新到自定义控件——它更新,但显然不是两种方式?

c# - Windows 10 UWP AppService,package.appxmanifest 问题

c# - 可以在泛型方法中使用 IList 但不能使用 List

c# - 以编程方式创建高质量的 ico 文件

c# - VB.NET 与 C# 的交叉兼容性

c# - 获取 "belong"到当前文化的字符列表

c# - 接口(interface)从 vb.net 到 c# 的转换

wpf - 使用 PRISM 构建数据库感知应用程序

c# - 在 WPF DataGrid 中绑定(bind) DataGridColumn 的 Visible 属性

c# - 使用 ScrollViewer.ScrollToEnd() 执行 AutoScroll 仅在调试时有效,事件处理程序太简单