【问题标题】:How to keep the leading zeros in CsvHelper CsvWriter?如何在 CsvHelper CsvWriter 中保留前导零?
【发布时间】:2023-03-03 02:00:01
【问题描述】:

我正在使用 CsvHelper 库从我的 .net 代码中读取/写入 csv 文件。

到目前为止,所有功能都运行良好,但我被困在使用 CsvWriter 类写入 csv 文件时如何保留前导零?目前,“020”或“001”等字符串值在csv文件上打印为“20”和“1”

【问题讨论】:

  • 它们是在文件中打印为 20 和 1 还是仅在您使用 excel 打开文件时打印?
  • 您必须使用 WriteField(string) 方法。使用String.Format() 格式化字符串
  • @JanneMatikainen 你指出了一些重要的事情;当我在 excel 中打开文件时,值是 20 和 1,但是,当我刚刚使用记事本编辑器检查文件时,值实际上是 020 和 001。非常感谢您的评论。

标签: .net vb.net csv csvhelper


【解决方案1】:

检查我的问题的 cmets 后,我发现前导零实际上存储在 CSV 文件中。令人困惑的是,在 Excel 上打开文件时,它会自动格式化数字字段,修剪前导零,因此显示为“20”和“1”,而不是 020 和 001。

【讨论】:

    【解决方案2】:

    这是一个已知问题,有一个已知的解决方案,如下所述:

    解决办法是这样写一个数字:

    ="001"
    

    这些不起作用(在 2010 年测试) - 前导零被修剪:001"001"=001

    【讨论】:

      【解决方案3】:

      CsvHelper 不再在基础库中包含与 Excel 相关的功能。

      如果您不使用引号,在编写 C# POCO 时包含等号 (=) 的一个简单技巧是对导致问题的特定字段使用只读字段,并应用格式和字符串通过它进行投射。

      using CsvHelper.Configuration.Attributes;
      
      public class MyRecord
      {
          [Ignore]
          public long Long => 0000012345;
          
          [Name("Long")]
          public string LongExcel => @$"=""{Long}""";
      }
      

      可能有更好的方法可以做到这一点,包括使用 Excel 扩展库 - 但对于任何寻求快速而肮脏的方法的人来说,这是一种选择。

      【讨论】:

        猜你喜欢
        • 2020-06-11
        • 2015-06-15
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2017-05-05
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多