第一篇博客为:https://www.cnblogs.com/lxhbky/p/11884474.html
本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现可以从第N行读取数据方法,但是我们可以假设一种情况来兼容目前的数据:
超级假设:假设Excel所有的数据都是我要收集的数据,不管是否有数据或者是不规范的数据,那么我可以将接受类的数据类型统一改为string,其他保持不变。
(这里注意通过改造属性的set方法来兼容的方式,本人已经试过,行不通;另外也测试了decimal?可为null的数据类型也不行,不是直接蹦了就是各种报错)
改造接受类如下:
public class WP { /// <summary> /// 管理代码 /// </summary> [CsvColumn(Name = "Administration Code", FieldIndex = 1)] public string AdministrationCode { get; set; } /// 日期 /// </summary> [CsvColumn(Name = "Date", FieldIndex = 4)] public string Date { get; set; } /// <summary> /// 支付金额 /// </summary> [CsvColumn(Name = "Amount", FieldIndex = 8)] public string Amount { get; set; } }
帮助类略作修改:
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() { //(默认)数据分隔符(默认“,”) SeparatorChar = ',', //(由true改为false,当成数据处理)首列数据是否含有列名 FirstLineHasColumnNames = false, //是否启用CsvColumn属性标记 EnforceCsvColumnAttribute = true, //是否忽略未知的行 IgnoreUnknownColumns = true, //(移除属性格式化配置)是否启用OutputFormat格式转换数据 //UseOutputFormatForParsingCsvValue = true, //是否启用属性下标读取数据 UseFieldIndexForReadingData = true }; return _csv.Read<T>(path, _fileDescription).ToList(); } }
总结:上述代码可兼容CSV文件中含有不规范的数据了!不规范数据处理:通过程序的方式自己过滤掉;数据类型转换:再定义一个含有正常类型属性的类,自己转换吧。