本文主要是為瞭解決上面博客遺留的一個含有不規範數據的一種方法,目前暫時沒有從包里發現可以從第N行讀取數據方法,但是我們可以假設一種情況來相容目前的數據: 超級假設:假設Excel所有的數據都是我要收集的數據,不管是否有數據或者是不規範的數據,那麼我可以將接受類的數據類型統一改為string,其... ...
第一篇博客為:https://www.cnblogs.com/lxhbky/p/11884474.html
本文主要是為瞭解決上面博客遺留的一個含有不規範數據的一種方法,目前暫時沒有從包里發現可以從第N行讀取數據方法,但是我們可以假設一種情況來相容目前的數據:
超級假設:假設Excel所有的數據都是我要收集的數據,不管是否有數據或者是不規範的數據,那麼我可以將接受類的數據類型統一改為string,其他保持不變。
(這裡註意通過改造屬性的set方法來相容的方式,本人已經試過,行不通;另外也測試了decimal?可為null的數據類型也不行,不是直接蹦了就是各種報錯)
改造接受類如下:
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; } }
幫助類略作修改:
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文件中含有不規範的數據了!不規範數據處理:通過程式的方式自己過濾掉;數據類型轉換:再定義一個含有正常類型屬性的類,自己轉換吧。