C#使用Linq to csv读取.csv文件数据

时间:2019-11-18
本文章向大家介绍C#使用Linq to csv读取.csv文件数据,主要包括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文件中不包含其他杂乱数据),如果文档的前几行含有一些其他说明信息的话,那么数据的读取可能遇到问题。而包里并没有提供可以设置开始读取数据的行数,所以,有点遗憾!

原文地址:https://www.cnblogs.com/lxhbky/p/11884474.html