【问题标题】:Creating a CSV with c# that doesnt get "corrupted" by excel用 c# 创建一个不会被 excel “损坏”的 CSV
【发布时间】: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 文件时,第一次没有选择正确的分隔符,您确定没有损坏它吗?

标签: c# excel csv


【解决方案1】:

我在这个已回答的问题中找到了解决方案 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 并且编辑不会破坏格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2017-03-29
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    相关资源
    最近更新 更多