【发布时间】:2017-10-16 15:57:13
【问题描述】:
我正在生成不同 CSV 文件的标题,以便我的用户可以看到格式
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# 新生成的)默认设置为“文本存档”,第二个(由 notepad++ 编辑)设置为 CSV。
我错过了什么代码吗? 我该怎么做才能停止 excel 弄乱我的档案?
【问题讨论】:
-
你在哪里关闭内存流..?你为什么要设置输出位置..?没必要……
-
Excel 不会损坏任何东西。为什么不用 EPPlus 创建一个real Excel 文件?
-
对于Excel,它不知道你的代码使用什么类型的字段、行、文本、小数、千位分隔符。当您在命令行中传递文件时,它也不会询问。它将使用 用户的 区域设置,特别是十进制、千位和 list 分隔符来读取未知文件。当您通过
Insert Data对话框打开 CSV 时,您会看到一个预览,如果设置出现错误,您可以在其中编辑设置 -
GetCsvByEnum是做什么的?生成的文本文件是什么样的? Excel 不会将;替换为三个空格,即使它不是 通用字段分隔符。如果用户的语言环境使用,作为列表分隔符,即许多开发人员使用的美国语言环境,它可能会将其视为文本,将整行显示为单个字段 -
当您在 Excel 中打开 CSV 文件时,第一次没有选择正确的分隔符,您确定没有损坏它吗?