第一篇博客爲: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