WeihanLi.Npoi 1.10.0 更新日志
WeihanLi.Npoi 1.10.0 更新日志
Intro
上周有個網(wǎng)友希望能夠?qū)隕xcel時提供一個 EndRowIndex 來自己控制結(jié)束行和根據(jù)字段過濾的功能,周末找時間做了一下這個 feature,并且解決了一個 Csv 導(dǎo)入的一個痛點,下面再具體介紹
EndRowIndex
SheetSetting 增加 EndRowIndex 以為了提前結(jié)束數(shù)據(jù)讀取,比如說只讀 TOP 100 條數(shù)據(jù)或者有一部分?jǐn)?shù)據(jù)屬于是不相關(guān)的垃圾數(shù)據(jù),我們就可以利用這個配置來避免做一些不必要的數(shù)據(jù)讀取(目前只對 Excel 導(dǎo)入生效)
DataValidation
一直沒有做數(shù)據(jù)校驗的功能,之前我的做法通常是先全部導(dǎo)入到一個 list 然后再過濾掉不符合要求的數(shù)據(jù),這樣做有些繁瑣而且增加內(nèi)存消耗,在這個版本中增加了數(shù)據(jù)校驗的功能,用戶可以設(shè)置一個委托來校驗數(shù)據(jù)是否合法,如果導(dǎo)入的數(shù)據(jù)不合法則不會返回,只有合法的數(shù)據(jù)才會返回。(Csv 和 Excel 導(dǎo)入有效)
使用示例可以參考下面的單元測試
[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 導(dǎo)入移除了 new() 限制,這樣解決了之前的一個痛點,就是當(dāng)導(dǎo)入類型為 string 的時候,沒辦法直接導(dǎo)入,需要添加一個 model,包含一個 string 類型的屬性,如此太麻煩了, new() 限制移除之后就可以直接導(dǎo)入為 List<string> 了,不再需要再建一個臨時類了
var?list?=?CsvHelper.ToEntityList<string>();More
最近想把 Entity 配置的 Mapping 這種方式抽象出來,適用于所有需要映射關(guān)系配置的場景
Excel 做一層抽象,基于 NPOI 實現(xiàn)一套,基于 Epplus 實現(xiàn)一套,也可以基于 OpenXML 實現(xiàn)
以后有需要對 Word 或其他的需要,也可以像 Excel 一樣,先做一層抽象,再根據(jù)相應(yīng)的 Package 做實現(xiàn)即可
一直覺得有些糾結(jié),如果這樣子改了項目名叫 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
總結(jié)
以上是生活随笔為你收集整理的WeihanLi.Npoi 1.10.0 更新日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core全Linux开发体验分
- 下一篇: 初识ABP vNext(10):ABP设