【问题标题】:What is the difference between comma and comma? [closed]逗号和逗号有什么区别? [关闭]
【发布时间】: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


【解决方案1】:

字符串的和平被双引号引起来。 您可以在添加之前检查字符串是否已经以引号开头和结尾。

if(!tbl.Rows[m][n].StartsWith("\"") && !tbl.Rows[m][n].EndsWith("\""))
strRowValue += tbl.Rows[m][n] + ",";
else
strRowValue += "\"" + tbl.Rows[m][n] + "\",";

【讨论】:

  • 打败我 :) 但即使是在一侧引用而不是另一侧引用也会使事情变得混乱,尽管这种情况不太可能发生。
  • 你是对的。虽然我只是通过使用tbl.Rows[m][n].ToString().Trim('"') 解决了问题,因为我在导出中不需要它。谢谢。
【解决方案2】:

问题数据后有双引号:""

看起来您的数据中可能有引号,然后您在输出数据时添加了引号,因此您最终在文件中得到了这个:

""Chef Software, Inc. <maintainers@chef.io>""

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2016-01-24
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多