日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

WeihanLi.Npoi 1.10.0 更新日志

發(fā)布時(shí)間:2023/12/4 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WeihanLi.Npoi 1.10.0 更新日志 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。