C# 将数据表导出到CSV时出现逗号问题
我采用了一些将数据表转换为CSV文件的代码。除了在实际数据中使用逗号外,它似乎工作得很好。在这种情况下,有没有办法显示逗号?这就是我所做的:C# 将数据表导出到CSV时出现逗号问题,c#,.net,wpf,csv,export-to-csv,C#,.net,Wpf,Csv,Export To Csv,我采用了一些将数据表转换为CSV文件的代码。除了在实际数据中使用逗号外,它似乎工作得很好。在这种情况下,有没有办法显示逗号?这就是我所做的: StringBuilder sb = new StringBuilder(); IEnumerable<string> columnNames = dtResults.Columns .Cast<DataColumn>()
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());
StringBuilder sb=新建StringBuilder();
IEnumerable columnNames=dtResults.Columns
.Cast()
.Select(column=>column.ColumnName);
sb.AppendLine(string.Join(“,”,columnNames));
foreach(dtResults.Rows中的数据行)
{
IEnumerable fields=row.ItemArray.Select(field=>field.ToString());
sb.AppendLine(string.Join(“,”字段));
}
File.writealText(saveFileDialog.FileName,sb.ToString());
如果字段包含逗号,则应将其置于双引号(或单引号)中
您可以使用创建您的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());
IEnumerable fields=row.ItemArray.Select(field=>field.ToString().CsvEscape());
注:根据csv规范,没有真正的csv规范,但描述了一种常用的格式 我发布了下面修改过的代码,这将对您有所帮助
StringBuilder sb = new StringBuilder();
string[] val = { "ramesh","suresh, Ganesh" };
IEnumerable<string> columnNames = val;
IList<string> objFinal = new List<string>();
foreach (string v in columnNames)
{
string temp = v;
if (temp.Contains(","))
temp = "\"" + v + "\"";
objFinal.Add(temp);
}
sb.AppendLine(string.Join(",", objFinal.AsEnumerable<string>()));
}
StringBuilder sb=新建StringBuilder();
字符串[]val={“ramesh”,“suresh,Ganesh”};
IEnumerable columnNames=val;
IList objFinal=新列表();
foreach(列名称中的字符串v)
{
字符串温度=v;
如果(温度包含(“,”))
temp=“\”+v+“\”;
对象最终添加(温度);
}
sb.AppendLine(string.Join(“,”,objFinal.AsEnumerable());
}
CSV支持双代码之间的数据中的逗号
借助下面的一行代码,您可以在一个快照中附加双代码和逗号
IEnumerable<string> columnNames = dtResults.Columns
.Cast<DataColumn>()
.Select(column => column.ColumnName);
var res = columnNames.Aggregate((current, next) => "\"" + current + "\"" + ", " + "\"" + next + "\"");
File.WriteAllText(saveFileDialog.FileName, res.ToString());
IEnumerable columnNames=dtResults.Columns
.Cast()
.Select(column=>column.ColumnName);
var res=columnNames.Aggregate((当前,下一个)=>“\”“+current+”\”“+”、“+”\”“+next+”);
File.WriteAllText(saveFileDialog.FileName,res.ToString());
另一个可能重复的可能重复:字段。ToString()
可能导致NullReferenceException
。使用string.Join(“,”,row.ItemArray)
或要保存OP
更改为其大部分代码,请在字段选择中使用@“\”“+field@\”
:)@卢克汉内利——请你详细说明一下好吗?:)@DotNET如果您有一种情况,您可以在某些数据中使用分隔符,您应该使用双引号将数据括起来”
@LukeHennerley,但如果我在数据中也有”
,该怎么办/@DotNET:我把我的答案扩大了一点。