WeihanLi.Npoi 导出支持自定义列内容啦

发布时间:2019-08-08来源: 编辑:

广告位置(首页一通--图文)

之前也有网友给提出过希望列合并或者自定义列内容的 issue 或请求,起初因为自己做 weihanli.npoi 这个扩展的最初目的是导入导出的简单化,使用这个扩展导出的 excel/csv 可以直接导入成 list tentity ,所以如果涉及的列合并的话或者自定义列的话,可能就不能直接导入生成 list tentity ,可能会有数据错误。但是最近发现可能有好多用这个扩展的只是用来导出,不会涉及到导入,所以最近考虑允许用户自定义列导出内容,之前默认是属性值的内容(后面增加了formatter 主要用于 tostring),从 weihanli.npoi 1.3.7 版本开始支持自定义列导出内容,你可以下载体验咯。

目前只支持 excel 的导出,只支持 fluentapi 方式配置

使用起来和之前没有什么差异,只是多了一个方法,可以在 property 上设置自定义导出,提供了一个 hascolumnformatter 的扩展方法,参数可以是一个委托

简单示例,示例源码:https://github.com/weihanli/weihanli.npoi/blob/dev/samples/dotnetcoresample/program.cs

private static void fluentsettingsforexcel
 var setting = excelhelper.settingfor testentity 
 // excelsetting
 setting.hasauthor
 .hastitle
 .hasdescription
 .hassubject
 .hasfreezepane;
 setting.property
 .hascolumnindex;
 setting.property
 .hascolumntitle
 .hascolumnindex;
 setting.property
 .hascolumnformatter = $ aaa_{entity.settingname}_{displayname} ) // 多个列合并到一个列
 .hascolumntitle
 .hascolumnindex;
 setting.property
 .hascolumntitle
 .hascolumnindex;
 setting.property
 .hascolumntitle
 .hascolumnindex
 .hascolumnformatter
 .hascolumnindex
 .hascolumntitle.ignored;
 setting.property.ignored;
 setting.property.ignored;
}

活动预约导出配置方式如下 , 实例源码:https://github.com/weihanli/activityreservation/blob/dev/activityreservation/startup.cs#l243

private void fluentexcelsettings
 var setting______celhelper.settingfor reservationlistviewmodel 
 settings.hasauthor
 .hastitle
 .hasdescription.ignored;
 settings.property
 .hascolumntitle
 .hascolumntitle
 .hascolumntitle
 .hascolumntitle
 .hascolumnformatter
 .hascolumntitle
 .hascolumntitle
 .hascolumntitle
 .hascolumntitle
 .hascolumntitle
 .hascolumnformatter = propertyval.getdescription); // 这个取枚举的description 的值
}

审核状态是一个枚举,定义如下:

public enum reservationstatus
 /// summary 
 /// 待审核
 /// /summary 
 [description]
 unreviewed = 0,
 /// summary 
 /// 审核通过
 /// /summary 
 [description]
 reviewed = 1,
 /// summary 
 /// 被拒绝
 /// /summary 
 [description]
 rejected = 2,
}

导出效果如下:

var setting______celhelper.settingsfor testentity 
settings.property
 .hascolumnformatter= $ ddd_{propertyval} 
setting.property
 .hascolumnformatter = $ aaa_{entity.settingname}_{displayname} ) // 多个列合并到一个列
 .hascolumntitle
 .hascolumnindex;

针对 property 提供了一个 hascolumnformatter 的扩展,可以使用 entity 来定制输出的内容,使得用户可以自由的定制要输出的内容。

最近使用 serilog 的时候发现,现在的 fluentapi 的语法和 serilog 有一些不太一样,对比如下:

serilog 配置:

loggingconfig
 .writeto.elasticsearch, $ logstash-{applicationhelper.applicationname.tolower} )
 .enrich.fromlogcontext
 .enrich.withrequestinfo
 ;

如果改成这样方式的话,weihanli.npoi 的配置可能是下面这样的:

var setting______celhelper.settingsfor testentity 
settings
.property.hascolumnformatter= $ ddd_{propertyval} )
.property.hascolumnformatter = $ aaa_{entity.settingname}_{displayname} ) // 多个列合并到一个列
.property.hascolumntitle
.property.hascolumnindex;

个人感觉不如现在的语法清晰,所以想要看看大家的意见,如果大多数都喜欢 serilog 的写法,考虑修改一下 fluentapi 写法

最后,期待大家的反馈,如果有什么问题或其他的需求,欢迎反馈 https://github.com/weihanli/weihanli.npoi/issues/new

大家都在评