如何将数据导出到C#中的CSV文件,以确保Excel可以使用它?
我们正在将经销商信息列表导出到CSV,以便客户可以在Excel中使用该列表,并将其导入回应用程序 当我们编辑CSV文件本身时,它工作得非常完美,但当Excel打开并保存文件时,它会丢失所有CSV结构 引号将被删除,分号也将被删除 我们的导出代码现在如下所示:如何将数据导出到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
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。你把它保存成文件,当然我们也可以试试。。。我将在今天下午晚些时候查看它的功能。我们最终将其保存为文件,并将文件发送给用户,这会更容易解决问题,但我相信直接发送应该是可能的。但是,您的解决方案确实解决了这个问题。