WeihanLi.Npoi 近期更新
WeihanLi.Npoi 近期更新
Intro
最近對(duì)我的 NPOI 擴(kuò)展做了一些改變,一方面提高性能,一方面修復(fù)bug,增加一些新的功能來讓它更加好用,前幾天發(fā)布了 1.5.0 版本,下面來介紹一下最近的更新
默認(rèn)導(dǎo)入/導(dǎo)出格式變更
在 1.5.0 版本中,將默認(rèn)導(dǎo)入/導(dǎo)出的excel格式從 xlsx 改為 xls 以獲得更好的性能,需要注意的是 xls 格式的 excel 文件一個(gè) sheet 最多 65535 行數(shù)據(jù),超過的話會(huì)報(bào)錯(cuò)。xls 可以有更好的性能和更優(yōu)的內(nèi)存分配,xlsx 可能是因?yàn)橐?xlsx 保持一致的接口,一致的編程體驗(yàn)才會(huì)性能有點(diǎn)問題,建議最好使用 xls 格式的 excel
具體的性能測(cè)試可以參考 Github,這里貼幾張圖:
基本測(cè)試:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.WorkbookBasicTest-report-github.md
Excel 導(dǎo)出測(cè)試:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.ExportExcelTest-report-github.md
Excel 導(dǎo)入測(cè)試:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/perf/WeihanLi.Npoi.Benchmark/BenchmarkDotNet.Artifacts/results/WeihanLi.Npoi.Benchmark.ImportExcelTest-report-github.md
導(dǎo)出數(shù)據(jù)較多,截圖難以完整展示,建議看 Github 上的測(cè)試結(jié)果,或者自己拉取代碼,在自己電腦上跑測(cè)試
ColumnWidth 的變化
原來的版本,會(huì)自動(dòng)調(diào)整列寬,應(yīng)網(wǎng)友的請(qǐng)求在 1.4.0 版本中增加了 ColumnWidth 的配置來自定義列寬,issue:https://github.com/WeihanLi/WeihanLi.Npoi/issues/30
可以通過 Attribute [Column(Width=100)] 或者通過 FluentAPI HasColumnWidth(100) 來自定義列寬
同時(shí)出于導(dǎo)出性能的考慮,在 1.5.0 版本中移除了自動(dòng)列寬的配置,如果需要啟用自動(dòng)列寬,可以通過 Sheet 的配置來實(shí)現(xiàn)
Attribute 方式:?[Sheet(SheetIndex=0,SheetName="TestSheet",AutoColumnWidthEnabled=true)]
FluentAPI:?setting.HasSheetConfiguration(0,"SystemSettingsList",true)
OutputFormatter/InputFormatter
在 1.3.7 版本中引入了 ColumnFormatter 來使得用戶可以自定義導(dǎo)出,讓導(dǎo)出變得更加靈活,可以自定義一個(gè)委托來指定導(dǎo)出的值。
在 1.4.5 版本將 ColumnFormatter 變更為 OutputFormatter,并增加了 InputFormatter 來使得導(dǎo)入更加靈活
看個(gè)示例:
var setting = ExcelHelper.SettingFor<TestEntity>(); // ExcelSetting setting.HasAuthor("WeihanLi") .HasTitle("WeihanLi.Npoi test") .HasDescription("WeihanLi.Npoi test") .HasSubject("WeihanLi.Npoi test"); setting.HasSheetConfiguration(0, "SystemSettingsList", 1); // setting.HasFilter(0, 1).HasFreezePane(0, 1, 2, 1); setting.Property(_ => _.SettingId) .HasColumnIndex(0); setting.Property(_ => _.SettingName) .HasColumnTitle("SettingName") .HasColumnIndex(1); setting.Property(_ => _.DisplayName) .HasOutputFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}") .HasInputFormatter((entity, originVal) => originVal.Split(new[] { '_' })[2]) .HasColumnTitle("DisplayName") .HasColumnIndex(2); setting.Property(_ => _.SettingValue) .HasColumnTitle("SettingValue") .HasColumnIndex(3); setting.Property(_ => _.CreatedTime) .HasColumnTitle("CreatedTime") .HasColumnIndex(4) .HasColumnWidth(10) .HasColumnFormatter("yyyy-MM-dd HH:mm:ss"); setting.Property(_ => _.CreatedBy) .HasColumnIndex(4) .HasColumnTitle("CreatedBy");通過 OutputFormatter/ InputFormatter 我們可以大大提高導(dǎo)出/導(dǎo)入的靈活性,CSV 也同樣適用
小功能
增加了導(dǎo)入 excel 時(shí)根據(jù)導(dǎo)入的文件內(nèi)容自動(dòng)調(diào)整列的順序,這樣即使不是嚴(yán)格按照配置的列順序定義的excel文件也可以正常的讀取
增加了?ExcelHelper.LoadExcel()/?ExcelHelper.ToEntityList?Stream/?byte[]?的重載,使得用戶可以直接從上傳的文件流或者一個(gè)字節(jié)數(shù)組中獲取 excel 內(nèi)容
增加了?CsvHelper.ToEntityList(byte[]bytes)/CsvHelper.ToEntityList(Streamstream)
導(dǎo)出 excel 時(shí)增加 sheetIndex 參數(shù),支持按某一個(gè) sheet 導(dǎo)出,原來只能導(dǎo)出第一個(gè) sheet
修復(fù)了 excel 導(dǎo)入導(dǎo)出不區(qū)分 string.Empty/null 的問題
修復(fù)了一些 csv 導(dǎo)入導(dǎo)出的bug
增加了對(duì)更多格式的讀取,對(duì)于下面這些格式的文件都按照 xlsx 處理,
*.xlsx:基于XML文件格式的Excel 2007工作簿缺省格式 *.xlsm:基于XML且啟用宏的Excel 2007工作簿 *.xltx:Excel2007模板格式 *.xltm:Excel 2007宏模板 *.xlam:Excel 2007宏加載項(xiàng) *.xlsb:Excel2007為大的或復(fù)雜的工作簿新引入的非XML二進(jìn)制文件格,允許優(yōu)化執(zhí)行和向后兼容。
More
可以查看 Github 上的 ReleaseNotes 來查看最近更新
更多詳情可以參考 Github 上的 PR,現(xiàn)在每一次包版本的更新都會(huì)有相應(yīng)的 PR,PR 合并之后通過 Azure Devops 自動(dòng)發(fā)布 nuget 包
希望打造一個(gè)更好的 Excel 導(dǎo)入導(dǎo)出工具,歡迎使用,歡迎給我提 issue,bug/feature 都?xì)g迎
總結(jié)
以上是生活随笔為你收集整理的WeihanLi.Npoi 近期更新的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PowerBI 11月更新 数据PPT是
- 下一篇: TypeScript 3.7稳定版发布