如何在C#中用CsvHelper读取CSV第15行起数据并映射到模型类
解决CsvHelper从指定行(第15行)开始读取CSV并映射到Model的方法
要实现跳过前14行、从第15行(列头)开始读取并映射到Model类,有两种可靠的方式,以下是具体实现:
方法一:通过配置直接跳过指定行数
这种方式最简单,直接在CsvConfiguration中设置SkipRows属性跳过前14行,CsvHelper会自动将第15行作为列头解析:
1. 定义Model类
先创建与CSV列对应的Model(按需调整属性):
public class UserData { public string Username { get; set; } public int Age { get; set; } public string Email { get; set; } }
2. 配置并读取CSV
using System.Globalization; using System.IO; using CsvHelper; using CsvHelper.Configuration; // 读取文件 using var streamReader = new StreamReader("your_data.csv"); using var csvReader = new CsvReader(streamReader, new CsvConfiguration(CultureInfo.InvariantCulture) { SkipRows = 14, // 跳过前14行,第15行作为列头 // 可选:如果列头与Model属性不完全匹配,可关闭默认验证(按需启用) HeaderValidated = null, MissingFieldFound = null }); // (可选)自定义列映射(当列头和属性名不一致时使用) public class UserDataMap : ClassMap<UserData> { public UserDataMap() { Map(m => m.Username).Name("用户名称"); Map(m => m.Age).Name("年龄"); Map(m => m.Email).Name("邮箱地址"); } } // 注册映射(如果使用了自定义映射) csvReader.Context.RegisterClassMap<UserDataMap>(); // 读取所有数据并映射到Model var records = csvReader.GetRecords<UserData>().ToList();
方法二:手动跳过行(更灵活)
如果前14行格式不规则,可手动循环跳过每行,再读取列头和数据:
using System.Globalization; using System.IO; using System.Collections.Generic; using CsvHelper; using var streamReader = new StreamReader("your_data.csv"); using var csvReader = new CsvReader(streamReader, CultureInfo.InvariantCulture); // 手动跳过前14行 for (int i = 0; i < 14; i++) { csvReader.Read(); } // 读取列头 csvReader.ReadHeader(); // 注册自定义映射(如果需要) csvReader.Context.RegisterClassMap<UserDataMap>(); // 逐行读取并映射 var records = new List<UserData>(); while (csvReader.Read()) { var record = csvReader.GetRecord<UserData>(); records.Add(record); }
注意事项
- 确认第15行确实是正确的列头行,且列名与Model属性(或自定义映射)匹配
- 如果CSV文件有特殊编码,在
StreamReader中指定对应编码(如Encoding.UTF8、Encoding.GetEncoding("GB2312")) - 确保已通过NuGet安装最新稳定版的CsvHelper包
内容的提问来源于stack exchange,提问作者Yashwanth ArulMozhi
相关产品推荐
相关产品推荐

