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

  • 相关阅读:
    SonarQube Scanner的配置与使用简介
    MySQL 查看及修改数据库引擎
    react封装echarts仪表盘 吴小明
    优化(兼容):antd表格横向滚动在Safari浏览器上的bug 吴小明
    vue使用toast全局替换alert 吴小明
    实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案 吴小明
    【前端优化】前端需要注意哪些 SEO 吴小明
    不可错过,RF之WebDriver功能配置
    Node获取路径的3种方法
    正则表达式中如何解决,提取固定区间中出现特征字符最近的内容
  • 原文地址:https://www.cnblogs.com/lxhbky/p/11884474.html
Copyright © 2020-2023  润新知