前言:今日遇到了一个需要读取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 { static List<T> Read<T>(string path,CsvFileDescription fileDescription) where T : class,new() { CsvContext _csv = CsvContext(); return _csv.Read<T>(path,fileDescription).ToList(); } string path) CsvContext(); CsvFileDescription _fileDescription = CsvFileDescription() { //首列数据是否含有列名 FirstLineHasColumnNames = true,是否启用CsvColumn属性标记 EnforceCsvColumnAttribute = 是否忽略未知的行 IgnoreUnkNownColumns = 是否启用OutputFormat格式转换数据 USEOutputFormatForParsingCsvValue = 是否启用属性下标读取数据 UseFieldindexForReadingData = 文本编码格式 TextEncoding = Encoding.UTF8 }; dindex:映射的位置;举例中未按照顺序写全,请自行补充;CanBeNull:是否可以为Null;
OutputFormat:数据格式化字符串方式; 启用时间格式使用yyyyMMddHHmmss自己根据数据调整; 含有小数点位的标记为C; 其他的类型请查阅资料
WP { /// <summary> /// 管理代码 </summary> [CsvColumn(Name = "Administration Code",Fieldindex = 1,CanBeNull = false)] string AdministrationCode { get; set; } 日期 Date4,1)">false,OutputFormat = yyyy-MM-dd HH:mm:ss"public DateTime Date { 支付金额 Amount8,1)">Cdecimal Amount { ; } }4-使用方式:
CSVHelper.Read<OrderTransaction.WP>(filePath);
5-待解决疑问:
上面的代码可以解决规范的CSV文件数据的读取(即CSV文件中不包含其他杂乱数据),如果文档的前几行含有一些其他说明信息的话,那么数据的读取可能遇到问题。而包里并没有提供可以设置开始读取数据的行数,所以,有点遗憾!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。