comma 和 comma 和有什么不一样?
What is the difference between comma and comma?
我必须将 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();
所以问题是为什么 dropbox 中的逗号不是 "generating" 新单元格,但在 chef 客户端中是?
那个字符串的和平被双引号。
您可以在添加之前检查字符串是否已准备好以引号开头和结尾。
if(!tbl.Rows[m][n].StartsWith("\"") && !tbl.Rows[m][n].EndsWith("\""))
strRowValue += tbl.Rows[m][n] + ",";
else
strRowValue += "\"" + tbl.Rows[m][n] + "\",";
问题数据后有双引号:""
看起来你的数据中可能有引号,然后你在输出数据时添加了引号,所以你最终在你的文件中得到了这个:
""Chef Software, Inc. <maintainers@chef.io>""
我必须将 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();
所以问题是为什么 dropbox 中的逗号不是 "generating" 新单元格,但在 chef 客户端中是?
那个字符串的和平被双引号。 您可以在添加之前检查字符串是否已准备好以引号开头和结尾。
if(!tbl.Rows[m][n].StartsWith("\"") && !tbl.Rows[m][n].EndsWith("\""))
strRowValue += tbl.Rows[m][n] + ",";
else
strRowValue += "\"" + tbl.Rows[m][n] + "\",";
问题数据后有双引号:""
看起来你的数据中可能有引号,然后你在输出数据时添加了引号,所以你最终在你的文件中得到了这个:
""Chef Software, Inc. <maintainers@chef.io>""