最近对个人 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 都欢迎