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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

WeihanLi.Npoi 1.21.0 Released

發布時間:2023/12/4 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WeihanLi.Npoi 1.21.0 Released 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

WeihanLi.Npoi 1.21.0 Released

Intro

WeihanLi.Npoi 是一個基于 netstandard2.0 的一個 NPOI 擴展庫,主要用于導入導出 Excel 以及 CSV,支持通過 Fluent API 的方式來支持非常靈活的導入導出配置,詳細使用可以參考文檔介紹以及項目示例 https://github.com/WeihanLi/WeihanLi.Npoi

New Features

本次引入的新功能是針對 DataTable 的優化,如果導入的 Excel 出現了重復列,原來會直接拋出一個 System.Data.DuplicateNameException,主要是因為原來是直接用 excel 列名稱作為 DataColumn 的 Name,而一個 DataTable 中是不允許有名字重復 Column 的,就像數據庫同一個表中不允許出現重復列名一樣。可以參考 Issue https://github.com/WeihanLi/WeihanLi.Npoi/issues/125

而導入 excel 時,很多時候可能并不根據列名稱去讀取對應的值,有時候會直接使用列索引來讀取列的值,這個場景下,即使 excel 列名沖突了也關系不大,我們只需要按照索引讀取就可以了,所以就考慮了支持沖突的讀取,因為想再導出的時候 excel 還和之前導入的時候保持一致,所以也增加了導出的時候對 DataTable 的處理,實現效果可以參考單元測試:

//?Csv [Fact] public?void?DuplicateColumnTest() {var?csvText?=?$@"A,B,C,A,B,C{Environment.NewLine}1,2,3,4,5,6";var?dataTable?=?CsvHelper.ToDataTable(csvText.GetBytes());Assert.Equal(6,?dataTable.Columns.Count);Assert.Equal(1,?dataTable.Rows.Count);var?newCsvText?=?CsvHelper.GetCsvText(dataTable);Assert.StartsWith("A,B,C,A,B,C",?newCsvText);var?newDataTable?=?CsvHelper.ToDataTable(newCsvText.GetBytes());Assert.Equal(dataTable.Columns.Count,?newDataTable.Columns.Count);Assert.Equal(dataTable.Rows.Count,?newDataTable.Rows.Count); } //?Excel [Theory] [ExcelFormatData] public?void?DuplicateColumnTest(ExcelFormat?excelFormat) {var?workbook?=?ExcelHelper.PrepareWorkbook(excelFormat);var?sheet?=?workbook.CreateSheet();var?headerRow?=?sheet.CreateRow(0);headerRow.CreateCell(0).SetCellValue("A");headerRow.CreateCell(1).SetCellValue("B");headerRow.CreateCell(2).SetCellValue("C");headerRow.CreateCell(3).SetCellValue("A");headerRow.CreateCell(4).SetCellValue("B");headerRow.CreateCell(5).SetCellValue("C");var?dataRow?=?sheet.CreateRow(1);dataRow.CreateCell(0).SetCellValue("1");dataRow.CreateCell(1).SetCellValue("2");dataRow.CreateCell(2).SetCellValue("3");dataRow.CreateCell(3).SetCellValue("4");dataRow.CreateCell(4).SetCellValue("5");dataRow.CreateCell(5).SetCellValue("6");var?dataTable?=?sheet.ToDataTable();Assert.Equal(headerRow.Cells.Count,?dataTable.Columns.Count);Assert.Equal(1,?dataTable.Rows.Count);var?newWorkbook?=?ExcelHelper.LoadExcel(dataTable.ToExcelBytes());var?newSheet?=?newWorkbook.GetSheetAt(0);Assert.Equal(sheet.PhysicalNumberOfRows,?newSheet.PhysicalNumberOfRows);for?(var?i?=?0;?i?<?sheet.PhysicalNumberOfRows;?i++){Assert.Equal(sheet.GetRow(i).Cells.Count,?newSheet.GetRow(i).Cells.Count);for?(var?j?=?0;?j?<?headerRow.Cells.Count;?j++){Assert.Equal(sheet.GetRow(i).GetCell(j).GetCellValue<string>(),newSheet.GetRow(i).GetCell(j).GetCellValue<string>());}} }

實現方式上一定程度參考了 issue 給出的建議,導入時重復列會添加一個 duplicate 標識和一個唯一 id 使得名稱不會重復,從而不會引發異常,導出時如果是重復列會把 duplicate 標識和唯一 id 去掉從而還原真實的列名稱,更多細節可以查看 Github 上的 PR https://github.com/WeihanLi/WeihanLi.Npoi/pull/126

Bug Fixes

修復了 sheet name 配置可能會不生效的 BUG

本次更新修復了在導出成文件的時候 sheet name 的配置沒有生效的一個 BUG,詳細可以參考 issue: https://github.com/WeihanLi/WeihanLi.Npoi/issues/127

開始并沒有重現這個 BUG,因為只有在導出為文件的時候才會有問題,如果是 bytes 或者 stream 是不會有這個問題的,現在已經增加了下面的測試用例來覆蓋這個情況

[Theory] [ExcelFormatData] public?void?SheetNameTest_ToExcelFile(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?settings?=?FluentSettings.For<Notice>();lock?(settings){settings.HasSheetSetting(s?=>{s.SheetName?=?"Test";});var?filePath?=?$"{Path.GetTempFileName()}.{excelFormat.ToString().ToLower()}";list.ToExcelFile(filePath);var?excel?=?ExcelHelper.LoadExcel(filePath);Assert.Equal("Test",?excel.GetSheetAt(0).SheetName);settings.HasSheetSetting(s?=>{s.SheetName?=?"NoticeList";});}}[Theory] [ExcelFormatData] public?void?SheetNameTest_ToExcelBytes(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?settings?=?FluentSettings.For<Notice>();lock?(settings){settings.HasSheetSetting(s?=>{s.SheetName?=?"Test";});var?excelBytes?=?list.ToExcelBytes(excelFormat);var?excel?=?ExcelHelper.LoadExcel(excelBytes,?excelFormat);Assert.Equal("Test",?excel.GetSheetAt(0).SheetName);settings.HasSheetSetting(s?=>{s.SheetName?=?"NoticeList";});} }

修復導出到文件 excel 文件格式不對的 BUG

根據文件路徑創建 excel workbook 的時候原來是有 BUG 的可能會導致文件格式不對,原來沒有先換取文件擴展名,新版本中修復了這個 bug,會先獲取文件擴展名再判斷文件格式

-?!excelPath.EqualsIgnoreCase(".xls") +?!Path.GetExtension(excelPath).EqualsIgnoreCase(".xls")

More

這個新版本中還有個針對 CsvHelper 的小優化,主要是獲取導出的 CSV 字符串時 includeHeader 參數變成了一個可選參數,對于調用方來說可以調用會變得更簡單一些,默認值是 true,默認會包含 header

public?static?string?GetCsvText(this?DataTable??dataTable,?bool?includeHeader?=?true); public?static?string?GetCsvText<TEntity>(this?IEnumerable<TEntity>?entities,?bool?includeHeader?=?true); 更多細節可以參考 PR 變更 https://github.com/WeihanLi/WeihanLi.Npoi/pull/130

References

  • https://github.com/WeihanLi/WeihanLi.Npoi

  • https://github.com/WeihanLi/WeihanLi.Npoi/pull/130

  • https://www.nuget.org/packages/WeihanLi.Npoi/1.21.0

  • https://github.com/WeihanLi/WeihanLi.Npoi/tree/1.21.0

總結

以上是生活随笔為你收集整理的WeihanLi.Npoi 1.21.0 Released的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本泡妞xxxx免费视频软件 | 国产在线a| 欧美性色a| 神马午夜久久 | 91在线精品李宗瑞 | 一区二区三区四区精品 | 中文在线字幕观看 | 久久影 | 色综合免费 | 色多多网站| 麻豆小视频| 天天操天天操天天操天天操天天操 | 国产白丝精品91爽爽久久 | 91无毒不卡 | 91国产中文字幕 | 涩涩av | 高跟肉丝丝袜呻吟啪啪网站av | 国产精品毛片 | 久草超碰| 草久在线| 欧美熟妇精品一区二区蜜桃视频 | av激情网站 | 中文字幕在线免费视频 | 久久人妻免费视频 | 久久久久亚洲精品中文字幕 | 欧美日韩国产第一页 | 日批视频在线 | 91亚洲精品在线观看 | 国产精品国产三级国产专区51区 | 久久精品人妻一区二区 | 亚洲а∨天堂久久精品2021 | 蜜臀av性久久久久蜜臀av麻豆 | 欧美日日骚 | 国产在线观看一区 | av涩涩 | 国产精品视频一二三区 | 国内自拍xxxx18| 青青久操| 桃色av网站 | 国产亚洲欧美一区二区三区 | 婷婷丁香六月 | 黄色av日韩| 女人十八岁毛片 | 国产老熟妇精品观看 | 欧美亚洲国产成人 | 好吊一区二区三区视频 | 4438激情网 | 1024金沙人妻一区二区三区 | 国产精品一区二区三区在线免费观看 | 网爆门在线 | 美女被草出白浆 | 婷婷丁香一区二区三区 | 欧美伦理一区二区三区 | 都市激情校园春色 | 18禁免费无码无遮挡不卡网站 | 欧美一级乱黄 | 午夜嘿嘿嘿 | 男女黄色又爽大片 | 永久免费未满 | 美女张开腿让人桶 | 美女丝袜av | 日b影院 | 国产精品无码午夜福利 | 嫩草伊人 | 欧美国产日韩一区二区 | 成人自拍视频 | 日本久久久久久久久久久 | av片在线免费看 | 97在线视频观看 | 中文字幕日韩三级 | 欧美精品第一区 | 国产清纯白嫩初高中在线观看性色 | 加勒比久久综合 | 自拍偷拍一区 | 91久久一区二区三区 | 欧美不卡视频在线观看 | 欧美黄视频| jizz一区二区 | 国产精品亚洲综合 | 关秀媚三级 | 少妇精品视频 | 黄色小网站入口 | 黄色中文字幕 | www,xxx69 japan | 人妻精品久久久久中文字幕69 | 99热亚洲精品 | 国产又粗又猛又黄又爽的视频 | 欧美精品成人一区二区三区四区 | 黑人精品欧美一区二区蜜桃 | 韩国中文字幕在线观看 | 日韩成人av片| 打开免费观看视频在线 | 性中国古装videossex | 最近最新mv字幕观看 | 在线免费看污片 | wwwwww日本 | 欧美性69| 日日夜夜婷婷 | 亚洲国产高清视频 |