【问题标题】:Excel is removing 00 from start of cell [duplicate]Excel 正在从单元格开头删除 00 [重复]
【发布时间】:2013-01-04 18:07:06
【问题描述】:

可能重复:
Excel CSV - Number cell format

我编写了一个将数据写入 csv 文件的 C# .net windows 应用程序,其中一个字段是以“00”开头的发票编号,即00144544。我检查了 csv,它的格式正确。

我可以在导出或 excel 中做些什么来防止这种情况发生吗?

【问题讨论】:

  • Excel 在打开 CSV 文件时“帮助”您格式化数据,例如检测您何时可能使用日期。只要 CSV 文件中的数据正确,您真的需要在 Excel 中查看吗?

标签: c# winforms excel


【解决方案1】:

@DocMax 所述的解决方案是创建您的 csv 并在您的值之前放置一个“=”符号,以便在编写一行时您可以这样做:

this._exportText.Append("=" + "\"" + (row.Index != null ? row.Index.ToString() : "").Trim() + "\",");

没有“=”它不起作用。

【讨论】:

    【解决方案2】:

    Excel 这样做很痛苦。一种解决方法是在您的号码前加上'。这将使 Excel 将其视为字符串,而不是自动将其转换为数字并去掉前导零。

    【讨论】:

    • 当我尝试使用a,'00034 创建一个CSV 文件并在Excel 2007 中打开它时,' 显示在列中。
    • @DocMax:嗯,我在 2010 年刚尝试过,你是对的。 ' 确实出现了。我认为至少早期版本隐藏了它。也许我记错了。至少它确实保留了前导零。
    【解决方案3】:

    您可以在前面放一个 ' 字符,或者更有用的是,将列号格式设置为 00000000

    为此,请选择列标题(或单元格),单击数字格式下拉菜单,选择“更多数字格式”,然后自定义,然后输入您的格式。

    【讨论】:

      【解决方案4】:

      当您将数据导入 Excel 时,告诉它(在导入向导中)将该列视为文本,而不是自动检测列类型。

      【讨论】:

      • @NeilKnight:OP 说 C# 正在编写 CSV,不一定是用来进行导入。
      • 我正在将其写入 csv,因此无法设置列设置
      • @CR41G14:我的解决方案必须在您在 Excel 中打开 CSV 时完成(这显然是次优的)。查看我在对您的问题的评论中链接的 SO 问题,以获得最佳方法(非常接近 DaveHogan 的)。
      • 你的评论是解决方案,因此 +1
      【解决方案5】:

      将值括在引号中,以便 excel 将其识别为字符串。 例如:

      "00144544"
      

      【讨论】:

      • “最干净”的解决方案,因为 CSV 文件仍然可读。
      • 我同意,但如果您仍希望 excel 将文本视为数字而不是字符串,@Matt Burlands 很好。
      • 这不起作用(至少在 Excel 2007 中)。引号仅用于允许在文本中嵌入逗号,但该值仍被解释为数字。
      • @DaveHogan:实际上,我认为 Excel 仍然将其视为字符串。从 CSV“标准”(它们有什么)的角度来看,您的解决方案可能更健壮和更好。我的解决方案在 Excel 中有效,但我不能保证它在其他任何地方都有效。
      • 我刚刚找到了stackoverflow.com/questions/137359,这表明你有多亲近:="00144544" 会做到的。
      猜你喜欢
      • 2015-03-11
      • 2014-11-11
      • 1970-01-01
      • 2023-04-05
      • 2020-09-30
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多