我正在使用 CsvHelper 库从我的 .net 代码中读取/写入 csv 文件。
到目前为止,所有功能都运行良好,但我被困在使用 CsvWriter 类写入 csv 文件时如何保持前导零?目前,诸如“020”或“001”之类的字符串值在csv文件上打印为“20”和“1”
检查我的问题的评论后,我发现前导零实际上存储在 CSV 文件中。令人困惑的是,在 Excel 上打开文件时,它会自动格式化数字字段,修剪前导零,因此显示为“20”和“1”,而不是 020 和 001。
这是一个已知问题,具有已知解决方案,如下所述:
解决办法是用这种格式写一个数字:
="001"
这些不起作用(在 2010 年测试) - 前导零被修剪:001
, "001"
,=001
CsvHelper 不再在基础库中包含与 Excel 相关的功能。
如果您不使用引号,则在编写 C# POCO 时包含等号 (=) 符号的一个简单技巧是对导致问题的特定字段使用只读字段,并通过该字段应用格式和字符串转换.
using CsvHelper.Configuration.Attributes;
public class MyRecord
{
[Ignore]
public long Long => 0000012345;
[Name("Long")]
public string LongExcel => @$"=""{Long}""";
}
可能有更好的方法来做到这一点,包括使用 Excel 扩展库 - 但对于任何寻求快速而肮脏的方法的人来说,这是一种选择。