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 = , CanBeNull = false)]
public string AdministrationCode { get; set; }/// <summary>
/// 日期
/// </summary>
[CsvColumn(Name = "Date", FieldIndex = , CanBeNull = false, OutputFormat = "yyyy-MM-dd HH:mm:ss")]
public DateTime Date { get; set; }/// <summary>
/// 支付金额
/// </summary>
[CsvColumn(Name = "Amount", FieldIndex = , CanBeNull = false, OutputFormat = "C")]
public decimal Amount { get; set; }
}
4-使用方式:
CSVHelper.Read<OrderTransaction.WP>(filePath);
5-待解决疑问:
上面的代码可以解决规范的CSV文件数据的读取(即CSV文件中不包含其他杂乱数据),如果文档的前几行含有一些其他说明信息的话,那么数据的读取可能遇到问题。而包里并没有提供可以设置开始读取数据的行数,所以,有点遗憾!
C#使用Linq to csv读取.csv文件数据的更多相关文章
- spark.read.csv读取CSV文件 ArrayIndexOutOfBoundsException报错
通过 spark.read.csv读取CSV文件时,遇到 到 ArrayIndexOutOfBoundsException报错,初步判断是缺少参数导致,放百度看看,没找引起问题相关的参数. 第一个看到 ...
- sas通过IMPORT过程读取外部文件数据
SAS通过IMPORT过程读取外部文件数据 使用IMPORT过程导入带分隔符的文件外,Microsoft Access数据库文件.Miscrosft Excel工作簿. dBase文件.JMP文件.S ...
- 上传读取Excel文件数据
/// <summary> /// 上传读取Excel文件数据 /// 来自http://www.cnblogs.com/cielwater /// </summary> // ...
- Unity 用C#脚本读取JSON文件数据
读取JSON文件数据网上有很多方法吗,这里采用SimpleJSON,关于SimpleJSON的介绍参考以下链接:http://wiki.unity3d.com/index.php/SimpleJSON ...
- spring 框架的xml文件如何读取properties文件数据
spring 框架的xml文件如何读取properties文件数据 第一步:在spring配置文件中 注意:value可以多配置几个properties文件 <bean id="pro ...
- Android - 读取JSON文件数据
Android读取JSON文件数据 JSON - JavaScript Object Notation 是一种存储和交换文本信息的语法. JSON对象在花括号中书写.用逗号来分隔值. JSON数组在方 ...
- python使用h5py读取mat文件数据,并保存图像
1 安装h5py sudo apt-get install libhdf5-dev sudo pip install h5py 假设你已经安装好python和numpy模块 2 读取mat文件数据 i ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...
随机推荐
- 系统默认的alert弹出框总会带有域名
最近在开发Hybrid APP时发现用系统默认的alert弹出框总会带有域名,用户体验就比较不好了.想了一种办法来解决就是覆盖alert的方法. (function(){ window.a ...
- ubuntu安装过程中遇到的一些问题及解决办法。
由于ubuntu与win10的双系统安装过程百度一下就有很多,在此不再赘述. (其实主要是忘记拍照片了,我一个菜鸡说得肯定也没有那些大佬们好,但网上确实也很多哈,加上有中文引导安装,问题不大.) 此篇 ...
- Netty学习——Netty和Protobuf的整合(一)
Netty学习——Netty和Protobuf的整合 Protobuf作为序列化的工具,将序列化后的数据,通过Netty来进行在网络上的传输 1.将proto文件里的java包的位置修改一下,然后再执 ...
- ThinkPHP5——模型关联(一对多关联)
关联定义 一对多关联的情况也比较常见,使用hasMany方法定义,参数包括: hasMany('关联模型名','外键名','主键名',['模型别名定义']); 例如租客表和宿舍表,一个宿舍有多个租客, ...
- make命令和makefile
make命令和Makefiles: 1. make是一个命令,解释makefile中指令的命令工具,不同的IDE有自己的make命令. 1. make命令不知道怎么去构建程序,必须有一个文件告诉mak ...
- 编码规范(c#)
万丈高楼平地起,好的编码风格能让别人撸起来更带劲,反之则想吐槽这是哪个傻X写的,这都是些什么乱七八糟的玩意? 然后看后面的注释发现是自己以前写的,那场面一度很尴尬.... 规约不是规则,不是一定要这样 ...
- [TimLinux] 开博一个月了
做事情,怕的确实是坚持!为了自己尽可能的每天一篇博文,时常在下班后,23点开始写博,有时候写到接近一点钟.但是这第一个月,确实坚持下来了.平均每天一篇.写博的过程,其实是: 知识的总结过程: 因为要求 ...
- webpack4.0(三)--动态生成html
webpack4.0--动态生成html 前言: webpack-dev-server实现了自动编译刷新浏览器,让编译出来的bundle.js托关于服务器根路径(电脑内存)中去.使用--content ...
- POJ 3660 cow contest (Folyed 求传递闭包)
N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we ...
- elasticsearch中mapping全解实战
目录 Mapping简介 Mapping Type 分词器最佳实践 字段类型 text 类型 keyword 类型 date类型 object类型 nest类型 range类型 实战:同时使用keyw ...