最近對個人 NPOI 擴展作了一些改變,一方面提升性能,一方面修復bug,增長一些新的功能來讓它更加好用,前幾天發佈了 1.5.0 版本,下面來介紹一下最近的更新git
在 1.5.0 版本中,將默認導入/導出的excel格式從 xlsx 改成 xls 以得到更好的性能,須要注意的是 xls 格式的 excel 文件一個 sheet 最多 65535 行數據,超過的話會報錯。
xls 能夠有更好的性能和更優的內存分配,xlsx 多是由於要和 xlsx 保持一致的接口,一致的編程體驗纔會性能有點問題,建議最好使用 xls 格式的 excelgithub
具體的性能測試能夠參考 Github,這裏貼幾張圖:編程
導出數據較多,截圖難以完整展現,建議看 Github 上的測試結果,或者本身拉取代碼,在本身電腦上跑測試
數組
原來的版本,會自動調整列寬,應網友的請求在 1.4.0 版本中增長了 ColumnWidth 的配置來自定義列寬,issue:https://github.com/WeihanLi/WeihanLi.Npoi/issues/30工具
能夠經過 Attribute [Column(Width=100)]
或者經過 FluentAPI HasColumnWidth(100)
來自定義列寬性能
同時出於導出性能的考慮,在 1.5.0 版本中移除了自動列寬的配置,若是須要啓用自動列寬,能夠經過 Sheet 的配置來實現測試
[Sheet(SheetIndex = 0, SheetName = "TestSheet", AutoColumnWidthEnabled = true)]
setting.HasSheetConfiguration(0, "SystemSettingsList", true)
在 1.3.7 版本中引入了 ColumnFormatter
來使得用戶能夠自定義導出,讓導出變得更加靈活,能夠自定義一個委託來指定導出的值。優化
在 1.4.5 版本將 ColumnFormatter
變動爲 OutputFormatter
,並增長了 InputFormatter
來使得導入更加靈活3d
看個示例:excel
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
咱們能夠大大提升導出/導入的靈活性,CSV 也一樣適用
ExcelHelper.LoadExcel()
/ExcelHelper.ToEntityList
Stream
/byte[]
的重載,使得用戶能夠直接從上傳的文件流或者一個字節數組中獲取 excel 內容CsvHelper.ToEntityList(byte[] bytes)/CsvHelper.ToEntityList(Stream stream)
.xlsx:基於XML文件格式的Excel 2007工做簿缺省格式
.xlsm:基於XML且啓用宏的Excel 2007工做簿
.xltx:Excel2007模板格式
.xltm:Excel 2007宏模板
.xlam:Excel 2007宏加載項
.xlsb:Excel2007爲大的或複雜的工做簿新引入的非XML二進制文件格,容許優化執行和向後兼容。
能夠查看 Github 上的 ReleaseNotes 來查看最近更新
更多詳情能夠參考 Github 上的 PR,如今每一次包版本的更新都會有相應的 PR,PR 合併以後經過 Azure Devops 自動發佈 nuget 包
但願打造一個更好的 Excel 導入導出工具,歡迎使用,歡迎給我提 issue,bug/feature 都歡迎