前言:今日遇到了一個須要讀取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文件中不包含其餘雜亂數據),若是文檔的前幾行含有一些其餘說明信息的話,那麼數據的讀取可能遇到問題。而包裏並無提供能夠設置開始讀取數據的行數,因此,有點遺憾!