分隔符解决方法CSV C#

时间:2015-10-05 15:27:13

标签: c# excel csv delimiter

我编写了一个将DataTable写入CSV文件的方法,该文件看起来像这样;

    public void writeToCSV(DataTable dt)
    {
        StringBuilder sb = new StringBuilder();
        IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
                                          Select(column => column.ColumnName);
        sb.AppendLine(string.Join(",", columnNames));

        foreach (DataRow row in dt.Rows)
        {
            IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString());
            sb.AppendLine(string.Join(",", fields));
        }
        File.WriteAllText("C:\\xampp\\mysql\\data\\sdcdbftest\\test.csv", sb.ToString());
        MessageBox.Show("Success");
    }

这可以很好地写入CSV文件,但问题是当我们的一个用户在我正在构建DataTable的其中一个字段中输入逗号时。 Excel将其作为新列,并且在写入Excel时,所有数据都会在错误的位置结束。

我尝试使用分号而不是逗号,但到目前为止还没有使用分号。我得到它的一种方法是写一个.txt文件,用分号作为附加的字符,然后在Excel中打开它,当然选择分号作为分隔符。

虽然这是一种解决方法,但我不希望每次打开excel文件时都让用户这样做。有解决方法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用双引号"来转义包含逗号和新行的列。

来源:wikipedia

答案 1 :(得分:0)

您需要划分CSV字段。如果一个字段包含保留字符,那么你需要用双引号括起它,例如“我的新领域”。此外,如果字段值本身包含双引号,则需要使用额外的双引号分隔。