如何将数据导出到C#中的CSV文件,确保Excel可以使用它
本文关键字:确保 文件 Excel 可以使 CSV 中的 数据 | 更新日期: 2023-09-27 18:29:46
我们正在将经销商信息列表导出到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打开并保存它时(即使不更改字段),所有分号和引号都会被删除,如果您尝试Save as
功能,它会检测到将其保存为.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以最简单的形式读取。