WeihanLi.Npoi 近期更新
Intro
导出数据较多,截图难以完整展示,建议看 Github 上的测试结果,或者自己拉取代码,在自己电脑上跑测试
ColumnWidth 的变化#
原来的版本,会自动调整列宽,应网友的请求在 1.4.0 版本中增加了 ColumnWidth 的配置来自定义列宽,issue:https://github.com/WeihanLi/WeihanLi.Npoi/issues/30
可以通过 Attribute [Column(Width=100)]
或者通过 FluentAPI HasColumnWidth(100)
来自定义列宽
同时出于导出性能的考虑,在 1.5.0 版本中移除了自动列宽的配置,如果需要启用自动列宽,可以通过 Sheet 的配置来实现
- Attribute 方式:
[Sheet(SheetIndex = 0, SheetName = "TestSheet", AutoColumnWidthEnabled = true)]
- FluentAPI:
setting.HasSheetConfiguration(0, "SystemSettingsList", true)
OutputFormatter/InputFormatter#
在 1.3.7 版本中引入了 ColumnFormatter
来使得用户可以自定义导出,让导出变得更加灵活,可以自定义一个委托来指定导出的值。
在 1.4.5 版本将 ColumnFormatter
变更为 OutputFormatter
,并增加了 InputFormatter
来使得导入更加灵活
看个示例:
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 也同样适用
小功能#
- 增加了导入 excel 时根据导入的文件内容自动调整列的顺序,这样即使不是严格按照配置的列顺序定义的excel文件也可以正常的读取
- 增加了
ExcelHelper.LoadExcel()
/ExcelHelper.ToEntityList
Stream
/byte[]
的重载,使得用户可以直接从上传的文件流或者一个字节数组中获取 excel 内容 - 增加了