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文件中不包含其余杂乱数据),若是文档的前几行含有一些其余说明信息的话,那么数据的读取可能遇到问题。而包里并无提供能够设置开始读取数据的行数,因此,有点遗憾!

相关文章
相关标签/搜索