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 ...
随机推荐
- PAT(甲级)2017年春季考试
PAT(甲级)2017年春季考试 A.Raffle for Weibo Followers #include<bits/stdc++.h> using namespace std; int ...
- Java泛型之上、下界通配符的理解(适合初学)
泛型的由来 为什么需要泛型 Java的数据类型一般都是在定义时就需要确定,这种强制的好处就是类型安全,不会出现像弄一个ClassCastException的数据给jvm,数据安全那么执行的clas ...
- 三角形列表前缀.html
发过火刮腹湔肠封官赐爵法规及法规及提供 发过火刮腹湔肠封官赐爵法规及法规及提供 发过火刮腹湔肠封官赐爵法规及法规及提供 发过火刮腹湔肠封官赐爵法规及法规及提供 发过火刮腹湔肠封官赐爵法规及法规及提供 ...
- Vue+ElementUI项目使用webpack输出MPA【华为云分享】
[摘要] Vue+ElementUI多页面打包改造 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目 ...
- 配置基于全局地址池的DHCP
配置基于全局地址池的DHCP 配置基于全局地址池的DHCP服务器,从所有接口上的用户都可以选择该地址池中的地址,是个公共地址池. 实验 1.拓扑图 2.实验步骤 基本配置 开启DHCP功能 创建一个全 ...
- 大数据之Linux网卡配置
当你安装好一台Linux之后,第一步自然是配置网卡,让你的Linux上网. 配置网卡大多数有两种模式,一种是桥接,一种是NAT 首先讲一下桥接网卡的上网原理,他是等同于在你现有的网络环境上直接现加一台 ...
- 小M的魔术表演
Description 小M听说会变魔术的男生最能吸引女生注意啦~所以小M费了九牛二虎之力终于学会了一个魔术:首先在桌面上放N张纸片,每张纸片上都写有一个数字.小M每次请女生给出一个数字x,然后划定任 ...
- ESP8266调试(UDP调试)
1.设置STA模式 AT+CWMODE=1 2.加入热点 AT+CWJAP="Admin_name","password" 3.开启单路连接 AT+CIPMUX ...
- MySQL 04
目录 python操作mysql mysql sql注入问题 问题描述 解决办法 增/删/改 查询 索引 基本概念 索引的原理 mysql索引种类 普通索引 唯一索引 联合索引 创建索引 正确使用索引 ...
- 每周一练 之 数据结构与算法(Tree)
这是第六周的练习题,最近加班比较多,上周主要完成一篇 GraphQL入门教程 ,有兴趣的小伙伴可以看下哈. 下面是之前分享的链接: 1.每周一练 之 数据结构与算法(Stack) 2.每周一练 之 数 ...