WeihanLi.Npoi 1.10.0 更新日志
WeihanLi.Npoi 1.10.0 更新日志
Intro
上周有個網友希望能夠導入Excel時提供一個 EndRowIndex 來自己控制結束行和根據字段過濾的功能,周末找時間做了一下這個 feature,并且解決了一個 Csv 導入的一個痛點,下面再具體介紹
EndRowIndex
SheetSetting 增加 EndRowIndex 以為了提前結束數據讀取,比如說只讀 TOP 100 條數據或者有一部分數據屬于是不相關的垃圾數據,我們就可以利用這個配置來避免做一些不必要的數據讀取(目前只對 Excel 導入生效)
DataValidation
一直沒有做數據校驗的功能,之前我的做法通常是先全部導入到一個 list 然后再過濾掉不符合要求的數據,這樣做有些繁瑣而且增加內存消耗,在這個版本中增加了數據校驗的功能,用戶可以設置一個委托來校驗數據是否合法,如果導入的數據不合法則不會返回,只有合法的數據才會返回。(Csv 和 Excel 導入有效)
使用示例可以參考下面的單元測試
[Theory] [InlineData(ExcelFormat.Xls)] [InlineData(ExcelFormat.Xlsx)] public?void?DataValidationTest(ExcelFormat?excelFormat) {IReadOnlyList<Notice>?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.For<Notice>();lock?(settings){settings.WithDataValidation(x?=>?x.Id?>?5);var?importedList?=?ExcelHelper.ToEntityList<Notice>(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() constraint
Csv 導入移除了 new() 限制,這樣解決了之前的一個痛點,就是當導入類型為 string 的時候,沒辦法直接導入,需要添加一個 model,包含一個 string 類型的屬性,如此太麻煩了, new() 限制移除之后就可以直接導入為 List<string> 了,不再需要再建一個臨時類了
var?list?=?CsvHelper.ToEntityList<string>();More
最近想把 Entity 配置的 Mapping 這種方式抽象出來,適用于所有需要映射關系配置的場景
Excel 做一層抽象,基于 NPOI 實現一套,基于 Epplus 實現一套,也可以基于 OpenXML 實現
以后有需要對 Word 或其他的需要,也可以像 Excel 一樣,先做一層抽象,再根據相應的 Package 做實現即可
一直覺得有些糾結,如果這樣子改了項目名叫 WeihaLi.Npoi 就不合適了,還沒想好項目怎么命名,后面想好了,再新建項目或項目重命名吧,目前改了一部分,放在 vnext 分支上了,有興趣的童鞋可以到 Github 看看,也非常歡迎各位給我提 feature request 或好的改進建議
Reference
https://github.com/WeihanLi/WeihanLi.Npoi
https://www.nuget.org/packages/WeihanLi.Npoi/
https://github.com/WeihanLi/WeihanLi.Npoi/issues/79
總結
以上是生活随笔為你收集整理的WeihanLi.Npoi 1.10.0 更新日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core全Linux开发体验分
- 下一篇: Java国家/地区使用限制条款引发争议