日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

                    歡迎訪問 生活随笔!

                    生活随笔

                    當(dāng)前位置: 首頁 >

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

                    發(fā)布時間:2023/12/4 47 豆豆
                    生活随笔 收集整理的這篇文章主要介紹了 WeihanLi.Npoi 导出支持自定义列内容啦 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

                    WeihanLi.Npoi 導(dǎo)出支持自定義列內(nèi)容啦

                    Intro

                    之前也有網(wǎng)友給提出過希望列合并或者自定義列內(nèi)容的 issue 或請求,起初因為自己做 WeihanLi.Npoi 這個擴展的最初目的是導(dǎo)入導(dǎo)出的簡單化,使用這個擴展導(dǎo)出的 Excel/csv 可以直接導(dǎo)入成 List<TEntity>,所以如果涉及的列合并的話或者自定義列的話,可能就不能直接導(dǎo)入生成 List<TEntity>,可能會有數(shù)據(jù)錯誤。但是最近發(fā)現(xiàn)可能有好多用這個擴展的只是用來導(dǎo)出,不會涉及到導(dǎo)入,所以最近考慮允許用戶自定義列導(dǎo)出內(nèi)容,之前默認是屬性值的內(nèi)容(后面增加了formatter 主要用于 ToString(formatter)),從 WeihanLi.Npoi 1.3.7 版本開始支持自定義列導(dǎo)出內(nèi)容,你可以下載體驗咯。

                    使用介紹

                    目前只支持 Excel 的導(dǎo)出,只支持 FluentAPI 方式配置

                    使用起來和之前沒有什么差異,只是多了一個方法,可以在 Property 上設(shè)置自定義導(dǎo)出,提供了一個 HasColumnFormatter 的擴展方法,參數(shù)可以是一個委托

                    簡單示例,示例源碼:https://github.com/WeihanLi/WeihanLi.Npoi/blob/dev/samples/DotNetCoreSample/Program.cs

                    private static void FluentSettingsForExcel() { var setting = ExcelHelper.SettingFor<TestEntity>(); // 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(); }

                    活動預(yù)約導(dǎo)出配置方式如下 , 實例源碼:https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation/Startup.cs#L243

                    private void FluentExcelSettings() { // var settings = ExcelHelper.SettingFor<ReservationListViewModel>(); settings.HasAuthor("WeihanLi") .HasTitle("活動室預(yù)約信息") .HasDescription("活動室預(yù)約信息"); settings.Property(r => r.ReservationId).Ignored(); settings.Property(r => r.ReservationForDate) .HasColumnTitle("預(yù)約使用日期"); settings.Property(r => r.ReservationForTime) .HasColumnTitle("預(yù)約使用的時間段"); settings.Property(r => r.ReservationUnit) .HasColumnTitle("預(yù)約單位"); settings.Property(r => r.ReservationTime) .HasColumnTitle("預(yù)約時間") .HasColumnFormatter("yyyy-MM-dd HH:mm:ss"); settings.Property(r => r.ReservationPersonName) .HasColumnTitle("預(yù)約人姓名"); settings.Property(r => r.ReservationPersonPhone) .HasColumnTitle("預(yù)約人手機號"); settings.Property(r => r.ReservationActivityContent) .HasColumnTitle("預(yù)約活動內(nèi)容"); settings.Property(r => r.ReservationPlaceName) .HasColumnTitle("活動室名稱"); // 這個審核狀態(tài)導(dǎo)出的值用的是枚舉的 Description 的值 settings.Property(r => r.ReservationStatus) .HasColumnTitle("審核狀態(tài)") .HasColumnFormatter((entity, propertyVal) => propertyVal.GetDescription()); }

                    審核狀態(tài)是一個枚舉,定義如下:

                    public enum ReservationStatus { /// <summary> /// 待審核 /// </summary> [Description("待審核")] UnReviewed = 0, /// <summary> /// 審核通過 /// </summary> [Description("審核通過")] Reviewed = 1, /// <summary> /// 被拒絕 /// </summary> [Description("未通過審核")] Rejected = 2, }

                    導(dǎo)出效果如下:

                    詳細介紹

                    var settings = ExcelHelper.SettingsFor<TestEntity>() settings.Property(r=>r.SettingName) .HasColumnFormatter((entity, propertyVal)=> $"ddd_{propertyVal}"); setting.Property(_ => _.DisplayName) .HasColumnFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}") // 多個列合并到一個列 .HasColumnTitle("DisplayName") .HasColumnIndex(2);

                    針對 Property 提供了一個 HasColumnFormatter(Func<TEntity,TProperty,object>formatter) 的擴展,可以使用 entity 來定制輸出的內(nèi)容,使得用戶可以自由的定制要輸出的內(nèi)容。

                    FluentAPI 配置方式探討

                    最近使用 Serilog 的時候發(fā)現(xiàn),現(xiàn)在的 FluentAPI 的語法和 Serilog 有一些不太一樣,對比如下:

                    Serilog 配置:

                    loggingConfig .WriteTo.Elasticsearch(Configuration.GetConnectionString("ElasticSearch"), $"logstash-{ApplicationHelper.ApplicationName.ToLower()}") .Enrich.FromLogContext() .Enrich.WithRequestInfo() ;

                    如果改成這樣方式的話,WeihanLi.Npoi 的配置可能是下面這樣的:

                    var settings = ExcelHelper.SettingsFor<TestEntity>() settings .Property(r=>r.SettingName).HasColumnFormatter((entity, propertyVal)=> $"ddd_{propertyVal}") .Property(_ => _.DisplayName).HasColumnFormatter((entity, displayName) => $"AAA_{entity.SettingName}_{displayName}") // 多個列合并到一個列 .Property(_ => _.DisplayName).HasColumnTitle("DisplayName") .Property(_ => _.DisplayName).HasColumnIndex(2);

                    個人感覺不如現(xiàn)在的語法清晰,所以想要看看大家的意見,如果大多數(shù)都喜歡 Serilog 的寫法,考慮修改一下 FluentAPI 寫法

                    期待大家的反饋。

                    End

                    最后,期待大家的反饋,如果有什么問題或其他的需求,歡迎反饋,歡迎給我提issue https://github.com/WeihanLi/WeihanLi.Npoi/issues/new


                    總結(jié)

                    以上是生活随笔為你收集整理的WeihanLi.Npoi 导出支持自定义列内容啦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

                    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。