【发布时间】:2016-01-25 13:37:39
【问题描述】:
我必须将DataTable 的内容保存到CSV 文件中。在DataTable 中一切正常,数据来自SQL 查询。但是,如果我在Excel 中打开CSV,我可以看到:
+---------------------+---------------------+------------------------------+------+------+----+
| DisplayName0 | Publisher0 | col3 | col4 | col5 | |
+---------------------+---------------------+------------------------------+------+------+----+
| Dropbox | Dropbox, Inc. | 432 | 415 | 17 | |
| Chef Client v12.4.3 | Chef Software | Inc. <maintainers@chef.io>"" | 193 | 180 | 13 |
| Cisco AnyConnect | Cisco Systems, Inc. | 836 | 824 | 12 | |
+---------------------+---------------------+------------------------------+------+------+----+
'Dropbox, Inc.' -> 'Dropbox, Inc.' //this is good
'Cisco Systems, Inc.' -> 'Cisco Systems, Inc.' //this is good too
'"Chef Software, Inc. <maintainers@chef.io>"' -> 'Chef Software' and ' Inc. <maintainers@chef.io>""' //what happened here?
用于将DataTable 导出到CSV 的旧代码是:
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(dlg3.FileName);
string strHeader = "";
for (int s = 0; s < tbl.Columns.Count; s++)
{
strHeader += "\"" + tbl.Columns[s].ColumnName + "\",";
}
streamWriter.WriteLine(strHeader);
for (int m = 0; m < tbl.Rows.Count; m++)
{
string strRowValue = "";
for (int n = 0; n < tbl.Columns.Count; n++)
{
if (tbl.Rows[m][n].ToString() != "")
{
strRowValue += "\"" + tbl.Rows[m][n] + "\",";
}
else
{
strRowValue += tbl.Rows[m][n] + ",";
}
}
streamWriter.WriteLine(strRowValue);
}
streamWriter.Close();
所以问题是为什么保管箱中的逗号没有“生成”新单元格,但在主厨客户端中却可以?
【问题讨论】:
-
这就是为什么我在每个单元格值之前和之后添加
"。基于这个 Excel 通常会转义一切,但现在。 -
请改用适当的 Csv nuget 包。
-
如果您包含程序生成的文本(而不是您对 Excel 如何解释该文本的解释),这可能会更清楚。
-
我不同意将我的名字附在上面的普遍密切原因。所以我留下了上面的评论。在Meta 上查看我的答案
-
@Drew 很公平,感谢您的解释。
标签: c# datatable export-to-csv