2017-10-16 52 views
0

我产生不同的CSV文件的头,我的用户可以看到的格式创建具有这并不让C#中的CSV“损坏”用Excel

var output = new MemoryStream() 
var writer = new StreamWriter(output, Encoding.UTF8); 
//this function gets the row depending of the enumerator name in this format a;b;c;d 
var header = ModelosCsv.GetCsvByEnum("HeadRowFileLoad"); 
writer.WriteLine(header); 
writer.Flush(); 
output.Position = 0; 
return File(output, "application/csv", "format.csv"); 

的代码是否正确,但如果他们创建CSV用excel打开CSV并保存,excel会覆盖所有的“;”为三重空间。 如果我用记事本++编辑结果并放回“;” excel不会再这样做。

我已用Excel打开这两个归档,并点击“另存为”,第一个(由C#新生成的)被设置为默认为“文本存档”被设置为CSV第二个(由记事本++编辑)。

我是否缺少代码? 我怎么能阻止excel搞乱我的档案?

+0

你在哪里关闭内存流..?你为什么设置输出位置..?没有必要... – MethodMan

+0

Excel不会破坏任何东西。你为什么不用EPPlus创建一个* real * Excel文件? –

+0

至于Excel,它不知道代码使用的字段,行,文本,小数点,分隔符的类型。当你在命令行中传递文件时,它也不会问。它将使用*用户的*语言环境设置,特别是小数点,千位和*列表*分隔符来读取未知文件。当您通过“插入数据”对话框打开CSV时,您将看到一个预览,允许您在出现错误时编辑设置 –

回答

0

我发现这个解决方案回答问题 Export to CSV using MVC, C# and jQuery

 var header = ModelosCsv.GetCsvByEnum("HeadRowFileLoad"); 

     return File(new System.Text.UTF8Encoding().GetBytes(header), "application/csv", "format.csv"); 

这样的Excel标识归档文件为CSV和编辑不会打破的格式。