我编写了一个将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文件时都让用户这样做。有解决方法吗?
答案 0 :(得分:2)
您可以使用双引号"
来转义包含逗号和新行的列。
来源:wikipedia
答案 1 :(得分:0)
您需要划分CSV字段。如果一个字段包含保留字符,那么你需要用双引号括起它,例如“我的新领域”。此外,如果字段值本身包含双引号,则需要使用额外的双引号分隔。