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


  前言:今日遇到了一個需要讀取CSV文件類型的EXCEL文檔數據的問題,原本使用NPOI的解決方案直接讀取文檔數據,最后失敗了,主要是文件的類型版本等信息不兼容導致。其他同事有使用linq to csv的Nuget包,獲取CSV文件數據的方式,感覺寫法非常簡單,且很快實現了我的需求,現分享給大家參考使用:

  LinqToCsv官方資料:https://www.codeproject.com/Articles/25133/LINQ-to-CSV-library  

 

  1-引用Nuget包:LinqToCsv:https://www.nuget.org/packages/LinqToCsv

  2-創建CSV幫助類:

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:

  備注:

  特性-Name:表示映射的列名;

  FieldIndex:映射的位置;舉例中未按照順序寫全,請自行補充;

  CanBeNull:是否可以為Null;

  OutputFormat:數據格式化字符串方式;   啟用時間格式使用yyyyMMddHHmmss自己根據數據調整;    含有小數點位的標記為C;   其他的類型請查閱資料

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文件中不包含其他雜亂數據),如果文檔的前幾行含有一些其他說明信息的話,那么數據的讀取可能遇到問題。而包里並沒有提供可以設置開始讀取數據的行數,所以,有點遺憾!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM