CsvHelper简单上手

CsvHelper是一个CSV文件的帮助类库,可以通过nuget的包管理进行引用。

虽然MS Office办公套件的Excel默认关联CSV文件,但其本质上还是一个文本文件。下面代码解析CSV并创建了CSV对应类实例。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
static class Program
{
    static void Main()
    {
        string path = @"C:\Users\Administrator\Desktop201201.csv";
        string csvStr = System.IO.File.ReadAllText(path, Encoding.Default);
        //using (var sr1 = new System.IO.StreamReader(path, Encoding.Default)) //从文件读取
        using (var sr1 = new System.IO.StringReader(csvStr)) //获得的是字符串的情况下,使用StringReader
        {
            var csv = new CsvReader(sr1, System.Globalization.CultureInfo.InvariantCulture);   
            csv.Context.RegisterClassMap<UcCreativeMap>();//注册映射类。值得注意的是在很多博文示例中都是使用这句代码“csv.Configuration.RegisterClassMap”注册映射类的,但在Ver26.1.0的CsvHelper中,并不是这样注册的,具体请移步GitHub查看源码Demo。
            var records = csv.GetRecords<UcCreative>();
            var list = records.ToList(); // 把 CSV 记录映射到 MyClass,返回的 records 是个 IEnumerable<T> 对象 
        }
    }
}
 
/// <summary>
/// 映射表头名字
/// </summary>
public class CreativeMap : CsvHelper.Configuration.ClassMap<UcCreative>
{
    public CreativeMap()
    {  
        Map(o => o.Date).Name("日期");//指定列头名称
        Map(o => o.Date).Name("日期").NameIndex(0);// 指定存在同名列头的顺序
        Map(o => o.Date).Index(0);// 指定列头的索引顺序
    }
}
/// <summary>
/// Model 类
/// </summary>
public class Creative
{
    public string Date { get; set; }
    public string AccountID { get; set; }
    public string Account { get; set; }
    public string AdGroupID { get; set; }
    public string AdGroup { get; set; }
}