Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#输出到.csv文件,不以逗号分隔列_C#_Excel_Csv - Fatal编程技术网

C#输出到.csv文件,不以逗号分隔列

C#输出到.csv文件,不以逗号分隔列,c#,excel,csv,C#,Excel,Csv,我有一个C#应用程序,它从SQL数据库中提取大量数据并进行处理。我想将该数据输出到.csv文件,但当我将其写入.csv文件并打开它时,却发现我的数据被分成了如下列: Id Model Number of items 10283 D 6 5673 B 4 224 X 2 我尝试使用AppendAllText()和WriteAllText()代替此方法,并使用制表符代替逗号作为分隔符,但得到了相同的结果。 我似乎找不

我有一个C#应用程序,它从SQL数据库中提取大量数据并进行处理。我想将该数据输出到.csv文件,但当我将其写入.csv文件并打开它时,却发现我的数据被分成了如下列:

Id Model Number of items 10283 D 6 5673 B 4 224 X 2 我尝试使用AppendAllText()和WriteAllText()代替此方法,并使用制表符代替逗号作为分隔符,但得到了相同的结果。

我似乎找不到与谷歌有同样问题的人,事实上,当我搜索这个问题时,我得到的结果是那些想要在数据中使用逗号而不是列的人,这与问题正好相反。

好的,首先,我建议在文本周围加引号。。。差不多

w.WriteLine('"' + p.id.ToString().Replace("\"", "\"\"") + "\",\"" + 
    p.model.Replace("\"", "\"\"") + ',' + 
    p.num.ToString().Replace("\"", "\"\""));

这可能有点晚了,但我遇到了同样的问题。我修好了,这是个愚蠢的问题。我忘了我是用德语服务器/实例编码的,所以他们在CSV中使用的分隔符实际上是分号,而不是逗号。尝试将您的分隔符更改为分号-当您通过Excel打开CSV文件时,它会将标题分隔为不同的列。

@Quantic为什么您认为他会将其粘贴到。。。。他分享了创建csv的代码…打开文件时文件的外观取决于打开文件时使用的程序,以及您告诉该程序执行的操作。如果文件本身生成正确,那么这里就没有任何编程问题。如果您仍然认为这里存在编程问题,那么请提供一个可靠地再现您的问题的好方法,并准确解释代码生成的输出以及您希望从代码中获得的输出。a.csv代表CommaSeparatedValue,而不是ColumnSependedValue。excel本机可以识别该格式,除非您有包含逗号的字符串列,否则不需要使用任何引号。即使使用完美的csv创建,您也有丢失数据的风险。由于您需要将数据从SQL server传输到excel,因此只需使用automation创建一个excel文件,并使用QueryTables.add或CopyFromRecordset将数据添加到该文件中即可。或者不使用Excel automation,您可以从Codeplex下载并使用Epplus库。@Manu@Manu在更现代的Excel版本中,它会自动执行此操作。我不确定你是否可以设置2010来实现这一点。这听起来像是你可以研究的东西,虽然我把每一项(p.id.ToString()、p.model和pp.num.ToString())都括起来了,它在我的值周围加了双引号,除了第一个(p.id),但是仍然没有列您需要了解CSV是如何工作的这并不是那么困难,您也不需要在值周围加双引号,除非您正在检索的数据中有引号。通常,在生产之前,您不知道哪些列中包含引号。逗号也是一样。您可能应该在所有列上对它们进行转义,如答案所示。特别是考虑到这并不是很难或不合理的期望+1.
using (StreamWriter w = new StreamWriter("C:\\Users\\User1\\Desktop\\test.csv"))
{
    w.WriteLine("Id,Model,Number of items,etc.");
    w.Flush();

    //Products is a list of product, a custom class
    foreach (product p in products)
    {
        //All properties of p shown here are strings
        w.WriteLine(p.id.ToString() + ',' + p.model
            + ',' + p.num.ToString());

        w.Flush();
    }
}
w.WriteLine('"' + p.id.ToString().Replace("\"", "\"\"") + "\",\"" + 
    p.model.Replace("\"", "\"\"") + ',' + 
    p.num.ToString().Replace("\"", "\"\""));