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