C#使用Linqtocsv读取.csv文件数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#使用Linqtocsv读取.csv文件数据
前言:今日遇到了一个需要读取CSV文件类型的EXCEL文档数据的问题,原本使用NPOI的解决方案直接读取文档数据,最后失败了,主要是文件的类型版本等信息不兼容导致。
其他同事有使用linq to csv的Nuget包,获取CSV文件数据的方式,感觉写法非常简单,且很快实现了我的需求,现分享给大家参考使用:
LinqT oCsv官方资料:/Articles/25133/LINQ-to-CSV-library
1-引用Nuget包: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文件中不包含其他杂乱数据),如果文档的前几行含有一些其他说明信息的话,那么数据的读取可能遇到问题。
而包里并没有提供可以设置开始读取数据的行数,所以,有点遗憾!。