前言:今日遇到了一个须要读取CSV文件类型的EXCEL文档数据的问题,本来使用NPOI的解决方案直接读取文档数据,最后失败了,主要是文件的类型版本等信息不兼容致使。其余同事有使用linq to csv的Nuget包,获取CSV文件数据的方式,感受写法很是简单,且很快实现了个人需求,现分享给你们参考使用:编码
LinqToCsv官方资料:https://www.codeproject.com/Articles/25133/LINQ-to-CSV-library spa
1-引用Nuget包:LinqToCsv:https://www.nuget.org/packages/LinqToCsvcode
2-建立CSV帮助类:orm
public class CSVHelper { public static List<T> Read<T>(string path, CsvFileDescription fileDescription) where T : class, new() { CsvContext _csv = new CsvContext(); return _csv.Read<T>(path, fileDescription).ToList(); } public static List<T> Read<T>(string path) where T : class, new() { CsvContext _csv = new CsvContext(); CsvFileDescription _fileDescription = new CsvFileDescription() { //首列数据是否含有列名 FirstLineHasColumnNames = true, //是否启用CsvColumn属性标记 EnforceCsvColumnAttribute = true, //是否忽略未知的行 IgnoreUnknownColumns = true, //是否启用OutputFormat格式转换数据 UseOutputFormatForParsingCsvValue = true, //是否启用属性下标读取数据 UseFieldIndexForReadingData = true, //文本编码格式 TextEncoding = Encoding.UTF8 }; return _csv.Read<T>(path, _fileDescription).ToList(); } }
3-建立接受类T:blog
备注:ip
特性-Name:表示映射的列名;ci
FieldIndex:映射的位置;举例中未按照顺序写全,请自行补充;文档
CanBeNull:是否能够为Null;字符串
OutputFormat:数据格式化字符串方式; 启用时间格式使用yyyyMMddHHmmss本身根据数据调整; 含有小数点位的标记为C; 其余的类型请查阅资料get
public class WP { /// <summary> /// 管理代码 /// </summary> [CsvColumn(Name = "Administration Code", FieldIndex = 1, CanBeNull = false)] public string AdministrationCode { get; set; }/// <summary> /// 日期 /// </summary> [CsvColumn(Name = "Date", FieldIndex = 4, CanBeNull = false, OutputFormat = "yyyy-MM-dd HH:mm:ss")] public DateTime Date { get; set; }/// <summary> /// 支付金额 /// </summary> [CsvColumn(Name = "Amount", FieldIndex = 8, CanBeNull = false, OutputFormat = "C")] public decimal Amount { get; set; } }
4-使用方式:
CSVHelper.Read<OrderTransaction.WP>(filePath);
5-待解决疑问:
上面的代码能够解决规范的CSV文件数据的读取(即CSV文件中不包含其余杂乱数据),若是文档的前几行含有一些其余说明信息的话,那么数据的读取可能遇到问题。而包里并无提供能够设置开始读取数据的行数,因此,有点遗憾!