Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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文件,以确保Excel可以使用它?_C#_Excel_Csv_Export To Csv - Fatal编程技术网

如何将数据导出到C#中的CSV文件,以确保Excel可以使用它?

如何将数据导出到C#中的CSV文件,以确保Excel可以使用它?,c#,excel,csv,export-to-csv,C#,Excel,Csv,Export To Csv,我们正在将经销商信息列表导出到CSV,以便客户可以在Excel中使用该列表,并将其导入回应用程序 当我们编辑CSV文件本身时,它工作得非常完美,但当Excel打开并保存文件时,它会丢失所有CSV结构 引号将被删除,分号也将被删除 我们的导出代码现在如下所示: Response.Clear(); Response.ClearHeaders(); Response.ClearContent(); Response.AddHeader("content-disposition", string.For

我们正在将经销商信息列表导出到CSV,以便客户可以在Excel中使用该列表,并将其导入回应用程序

当我们编辑CSV文件本身时,它工作得非常完美,但当Excel打开并保存文件时,它会丢失所有CSV结构

引号将被删除,分号也将被删除

我们的导出代码现在如下所示:

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("content-disposition", string.Format("attachment;filename=export_dealers_{0}_{1:yyyy-MM-dd-HH-mm}.csv; charset=utf-8", countryCode, DateTime.Now));
Response.ContentType = "text/csv";
Response.AddHeader("Pragma", "public");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(Encoding.UTF8.GetPreamble());
Response.Write(ToCsv(list));
Response.Flush();
Response.End();
toCSV
函数只返回一个字符串,其中所有字段都在引号内,用分号分隔

我们以前的版本有所不同,但必须添加额外的编码数据,这样就不会弄乱特殊字符,比如
ç
ñ


上面的代码导出了一个看起来正确的CSV文件,但是当Excel打开并保存它(即使不更改字段)时,所有分号和引号都会被删除,如果您尝试
另存为
功能,它会检测到将其保存为
.txt
文件而不是CSV。

这对我来说很好:

var lines = new string[10][];

var csv = string.Join("\r\n", lines.Select(words =>
              string.Join(",", words.Select(word =>
                  "\"" + word.Replace("\"", "\"\"") + "\"")))));

File.WriteAllText("file.csv", csv);

Excel以最简单的形式读取它。

我将尝试一下,但它似乎过于简单化:),像尼奥尔ç这样的特殊字符如何执行这些操作?因为法语、西班牙语和其他语言都充满了这些不规则的字符:)这就是为什么我们要做所有的编码工作。最终,你会像保存一个文本文件一样,用逗号等分隔。如果文本文件支持字符,csv和excel也会支持字符。主要区别在于我们不保存到文件,而是直接以数据流的形式输出给用户。为此,我们需要将标题和编码设置为utf8。你把它保存成文件,当然我们也可以试试。。。我将在今天下午晚些时候查看它的功能。我们最终将其保存为文件,并将文件发送给用户,这会更容易解决问题,但我相信直接发送应该是可能的。但是,您的解决方案确实解决了这个问题。