盐城网站建设招聘,ext做的网站有那些,安徽外经建设集团有限公司网站,钓鱼网站怎么做WeihanLi.Npoi 1.10.0 更新日志Intro上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的功能#xff0c;周末找时间做了一下这个 feature#xff0c;并且解决了一个 Csv 导入的一个痛点#xff0c;下面再具体介绍EndRowIndexSheetSetti… WeihanLi.Npoi 1.10.0 更新日志Intro上周有个网友希望能够导入Excel时提供一个 EndRowIndex 来自己控制结束行和根据字段过滤的功能周末找时间做了一下这个 feature并且解决了一个 Csv 导入的一个痛点下面再具体介绍EndRowIndexSheetSetting 增加 EndRowIndex 以为了提前结束数据读取比如说只读 TOP 100 条数据或者有一部分数据属于是不相关的垃圾数据我们就可以利用这个配置来避免做一些不必要的数据读取目前只对 Excel 导入生效DataValidation一直没有做数据校验的功能之前我的做法通常是先全部导入到一个 list 然后再过滤掉不符合要求的数据这样做有些繁琐而且增加内存消耗在这个版本中增加了数据校验的功能用户可以设置一个委托来校验数据是否合法如果导入的数据不合法则不会返回只有合法的数据才会返回。Csv 和 Excel 导入有效使用示例可以参考下面的单元测试[Theory]
[InlineData(ExcelFormat.Xls)]
[InlineData(ExcelFormat.Xlsx)]
public void DataValidationTest(ExcelFormat excelFormat)
{IReadOnlyListNotice list Enumerable.Range(0, 10).Select(i new Notice(){Id i 1,Content $content_{i},Title $title_{i},PublishedAt DateTime.UtcNow.AddDays(-i),Publisher $publisher_{i}}).ToArray();var excelBytes list.ToExcelBytes(excelFormat);var settings FluentSettings.ForNotice();lock (settings){settings.WithDataValidation(x x.Id 5);var importedList ExcelHelper.ToEntityListNotice(excelBytes, excelFormat);Assert.Equal(list.Count(x x.Id 5), importedList.Count);int i 0, k 0;while (list[k].Id ! importedList[i].Id){k;}for (; i importedList.Count; i, k){if (list[k] null){Assert.Null(importedList[i]);}else{Assert.Equal(list[k].Id, importedList[i].Id);Assert.Equal(list[k].Title, importedList[i].Title);Assert.Equal(list[k].Content, importedList[i].Content);Assert.Equal(list[k].Publisher, importedList[i].Publisher);Assert.Equal(list[k].PublishedAt.ToStandardTimeString(), importedList[i].PublishedAt.ToStandardTimeString());}}settings.WithDataValidation(null);}
}Csv new() constraintCsv 导入移除了 new() 限制这样解决了之前的一个痛点就是当导入类型为 string 的时候没办法直接导入需要添加一个 model包含一个 string 类型的属性如此太麻烦了 new() 限制移除之后就可以直接导入为 Liststring 了不再需要再建一个临时类了var list CsvHelper.ToEntityListstring();
More最近想把 Entity 配置的 Mapping 这种方式抽象出来适用于所有需要映射关系配置的场景Excel 做一层抽象基于 NPOI 实现一套基于 Epplus 实现一套也可以基于 OpenXML 实现以后有需要对 Word 或其他的需要也可以像 Excel 一样先做一层抽象再根据相应的 Package 做实现即可一直觉得有些纠结如果这样子改了项目名叫 WeihaLi.Npoi 就不合适了还没想好项目怎么命名后面想好了再新建项目或项目重命名吧目前改了一部分放在 vnext 分支上了有兴趣的童鞋可以到 Github 看看也非常欢迎各位给我提 feature request 或好的改进建议Referencehttps://github.com/WeihanLi/WeihanLi.Npoihttps://www.nuget.org/packages/WeihanLi.Npoi/https://github.com/WeihanLi/WeihanLi.Npoi/issues/79