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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WeihanLi.Npoi 1.10.0 更新日志

發布時間:2023/12/4 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 更新日志的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。