企业网站的设计与实现,摄影作品投稿网站,erp网站开发,wordpress多说读者墙WeihanLi.Npoi 导出支持自定义列内容啦Intro之前也有网友给提出过希望列合并或者自定义列内容的 issue 或请求#xff0c;起初因为自己做 WeihanLi.Npoi 这个扩展的最初目的是导入导出的简单化#xff0c;使用这个扩展导出的 Excel/csv 可以直接导入成 ListTEntity起初因为自己做 WeihanLi.Npoi 这个扩展的最初目的是导入导出的简单化使用这个扩展导出的 Excel/csv 可以直接导入成 ListTEntity所以如果涉及的列合并的话或者自定义列的话可能就不能直接导入生成 ListTEntity可能会有数据错误。但是最近发现可能有好多用这个扩展的只是用来导出不会涉及到导入所以最近考虑允许用户自定义列导出内容之前默认是属性值的内容后面增加了formatter 主要用于 ToString(formatter))从 WeihanLi.Npoi 1.3.7 版本开始支持自定义列导出内容你可以下载体验咯。使用介绍目前只支持 Excel 的导出只支持 FluentAPI 方式配置使用起来和之前没有什么差异只是多了一个方法可以在 Property 上设置自定义导出提供了一个 HasColumnFormatter 的扩展方法参数可以是一个委托简单示例示例源码https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/samples/DotNetCoreSample/Program.csprivate static void FluentSettingsForExcel()
{ var setting ExcelHelper.SettingForTestEntity(); // ExcelSetting setting.HasAuthor(WeihanLi) .HasTitle(WeihanLi.Npoi test) .HasDescription() .HasSubject(); setting.HasSheetConfiguration(0, SystemSettingsList); setting.HasFilter(0, 1) .HasFreezePane(0, 1, 2, 1); setting.Property(_ _.SettingId) .HasColumnIndex(0); setting.Property(_ _.SettingName) .HasColumnTitle(SettingName) .HasColumnIndex(1); setting.Property(_ _.DisplayName) .HasColumnFormatter((entity, displayName) $AAA_{entity.SettingName}_{displayName}) .HasColumnTitle(DisplayName) .HasColumnIndex(2); setting.Property(_ _.SettingValue) .HasColumnTitle(SettingValue) .HasColumnIndex(3); setting.Property(_ _.CreatedTime) .HasColumnTitle(CreatedTime) .HasColumnIndex(5) .HasColumnFormatter(yyyy-MM-dd HH:mm:ss); setting.Property(_ _.CreatedBy) .HasColumnIndex(4) .HasColumnTitle(CreatedBy); // setting.Property(_ _.PKID).Ignored(); setting.Property(_ _.UpdatedBy).Ignored(); setting.Property(_ _.UpdatedTime).Ignored();
}活动预约导出配置方式如下 实例源码https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation/Startup.cs#L243private void FluentExcelSettings()
{ // var settings ExcelHelper.SettingForReservationListViewModel(); settings.HasAuthor(WeihanLi) .HasTitle(活动室预约信息) .HasDescription(活动室预约信息); settings.Property(r r.ReservationId).Ignored(); settings.Property(r r.ReservationForDate) .HasColumnTitle(预约使用日期); settings.Property(r r.ReservationForTime) .HasColumnTitle(预约使用的时间段); settings.Property(r r.ReservationUnit) .HasColumnTitle(预约单位); settings.Property(r r.ReservationTime) .HasColumnTitle(预约时间) .HasColumnFormatter(yyyy-MM-dd HH:mm:ss); settings.Property(r r.ReservationPersonName) .HasColumnTitle(预约人姓名); settings.Property(r r.ReservationPersonPhone) .HasColumnTitle(预约人手机号); settings.Property(r r.ReservationActivityContent) .HasColumnTitle(预约活动内容); settings.Property(r r.ReservationPlaceName) .HasColumnTitle(活动室名称); // 这个审核状态导出的值用的是枚举的 Description 的值 settings.Property(r r.ReservationStatus) .HasColumnTitle(审核状态) .HasColumnFormatter((entity, propertyVal) propertyVal.GetDescription());
}审核状态是一个枚举定义如下public enum ReservationStatus
{ /// summary /// 待审核 /// /summary [Description(待审核)] UnReviewed 0, /// summary /// 审核通过 /// /summary [Description(审核通过)] Reviewed 1, /// summary /// 被拒绝 /// /summary [Description(未通过审核)] Rejected 2,
}导出效果如下详细介绍var settings ExcelHelper.SettingsForTestEntity()
settings.Property(rr.SettingName) .HasColumnFormatter((entity, propertyVal) $ddd_{propertyVal});
setting.Property(_ _.DisplayName) .HasColumnFormatter((entity, displayName) $AAA_{entity.SettingName}_{displayName}) // 多个列合并到一个列 .HasColumnTitle(DisplayName) .HasColumnIndex(2);针对 Property 提供了一个 HasColumnFormatter(FuncTEntity,TProperty,objectformatter) 的扩展可以使用 entity 来定制输出的内容使得用户可以自由的定制要输出的内容。FluentAPI 配置方式探讨最近使用 Serilog 的时候发现现在的 FluentAPI 的语法和 Serilog 有一些不太一样对比如下Serilog 配置:loggingConfig .WriteTo.Elasticsearch(Configuration.GetConnectionString(ElasticSearch), $logstash-{ApplicationHelper.ApplicationName.ToLower()}) .Enrich.FromLogContext() .Enrich.WithRequestInfo() ;如果改成这样方式的话WeihanLi.Npoi 的配置可能是下面这样的var settings ExcelHelper.SettingsForTestEntity()
settings
.Property(rr.SettingName).HasColumnFormatter((entity, propertyVal) $ddd_{propertyVal})
.Property(_ _.DisplayName).HasColumnFormatter((entity, displayName) $AAA_{entity.SettingName}_{displayName}) // 多个列合并到一个列
.Property(_ _.DisplayName).HasColumnTitle(DisplayName)
.Property(_ _.DisplayName).HasColumnIndex(2);个人感觉不如现在的语法清晰所以想要看看大家的意见如果大多数都喜欢 Serilog 的写法考虑修改一下 FluentAPI 写法期待大家的反馈。End最后期待大家的反馈如果有什么问题或其他的需求欢迎反馈欢迎给我提issue https://github.com/WeihanLi/WeihanLi.Npoi/issues/new