第一篇博客为:http://www.javashuo.com/article/p-yvcddaxr-v.htmlhtml
本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现能够从第N行读取数据方法,可是咱们能够假设一种状况来兼容目前的数据:测试
超级假设:假设Excel全部的数据都是我要收集的数据,无论是否有数据或者是不规范的数据,那么我能够将接受类的数据类型统一改成string,其余保持不变。spa
(这里注意经过改造属性的set方法来兼容的方式,本人已经试过,行不通;另外也测试了decimal?可为null的数据类型也不行,不是直接蹦了就是各类报错)code
改造接受类以下:orm
public class WP { /// <summary> /// 管理代码 /// </summary> [CsvColumn(Name = "Administration Code", FieldIndex = 1)] public string AdministrationCode { get; set; } /// 日期 /// </summary> [CsvColumn(Name = "Date", FieldIndex = 4)] public string Date { get; set; } /// <summary> /// 支付金额 /// </summary> [CsvColumn(Name = "Amount", FieldIndex = 8)] public string Amount { get; set; } }
帮助类略做修改:htm
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() { //(默认)数据分隔符(默认“,”) SeparatorChar = ',', //(由true改成false,当成数据处理)首列数据是否含有列名 FirstLineHasColumnNames = false, //是否启用CsvColumn属性标记 EnforceCsvColumnAttribute = true, //是否忽略未知的行 IgnoreUnknownColumns = true, //(移除属性格式化配置)是否启用OutputFormat格式转换数据 //UseOutputFormatForParsingCsvValue = true, //是否启用属性下标读取数据 UseFieldIndexForReadingData = true }; return _csv.Read<T>(path, _fileDescription).ToList(); } }
总结:上述代码可兼容CSV文件中含有不规范的数据了!不规范数据处理:经过程序的方式本身过滤掉;数据类型转换:再定义一个含有正常类型属性的类,本身转换吧。blog