C#使用Linq to csv讀取.csv文件數據

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

相關文章
相關標籤/搜索