Magicodes.IE 2.2里程碑需求和建議徵集

  • 2020 年 3 月 17 日
  • 筆記

簡介

Magicodes.IE是導入導出通用庫,支援Dto導入導出以及動態導出,支援Excel、Word、Pdf、Csv和Html。已加入NCC開源組織。

Magicodes.IE 2.0發布

  • Github:

https://github.com/dotnetcore/Magicodes.IE

  • 碼雲(手動同步,不維護):

https://gitee.com/magicodes/Magicodes.IE

當前狀態如下所示:

Magicodes.IE是一個長期的項目,為了更好的支援和維護此項目,我們成立了Magicodes.IE開源管理委員會,委員會成員擁有相關里程碑功能開發的投票權。我們非常期待也非常需要您的加入。

當前里程碑狀態如下所示:

為了更好的根據實際功能來迭代,從2.2的里程碑規劃開始,我們將結合社區的建議和意見來進行迭代,您可以點此鏈接來提交您的意見和建議:

https://github.com/dotnetcore/Magicodes.IE/issues/46

Magicodes.IE主體功能介紹

  • 需配合相關導入導出的DTO模型使用,支援通過DTO以及相關特性控制導入導出。配置特性即可控制相關邏輯和顯示結果,無需修改邏輯程式碼;
  • 支援各種篩選器,以便支援多語言、動態控制列展示等場景,具體使用見單元測試:
    • 導入列頭篩選器(可動態指定導入列、導入的值映射關係)
    • 導出列頭篩選器(可動態控制導出列,支援動態導出(DataTable))
    • 導入結果篩選器(可修改標註文件)
  • 導出支援文本自定義過濾或處理;
  • 導入支援中間空行自動跳過;
  • 導入支援自動根據 DTO 生成導入模板,針對必填項將自動標註;
  • 導入支援數據下拉選擇,目前僅支援枚舉類型;
  • 導入數據支援前後空格以及中間空格處理,允許指定列進行設置;
  • 導入支援模板自動檢查,數據自動校驗,異常統一處理,並提供統一的錯誤封裝,包含異常、模板錯誤和行數據錯誤;
  • 支援導入表頭位置設置,默認為1;
  • 支援導入列亂序,無需按順序一一對應;
  • 支援導入指定列索引,默認自動識別;
  • 導出Excel支援拆分Sheet,僅需設置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,為0則不拆分。具體見單元測試;
  • 支援將導入Excel進行錯誤標註;
  • 導入支援截止列設置,如未設置則默認遇到空格截止;
  • 支援導出HTML、Word、Pdf,支援自定義導出模板;
    • 導出HTML
    • 導出Word
    • 導出Pdf,支援設置,具體見更新日誌
    • 導出收據
  • 導入支援重複驗證;
  • 支援單個數據模板導出,常用於導出收據、憑據等業務
  • 支援動態列導出(基於DataTable),並且超過100W將自動拆分Sheet。(感謝張善友老師(https://github.com/xin-lai/Magicodes.IE/pull/8 ))
  • 支援值映射,支援通過「ValueMappingAttribute」特性設置值映射關係。用於生成導入模板的數據驗證約束以及進行數據轉換。
        /// <summary>          ///     性別          /// </summary>          [ImporterHeader(Name = "性別")]          [Required(ErrorMessage = "性別不能為空")]          [ValueMapping(text: "男", 0)]          [ValueMapping(text: "女", 1)]          public Genders Gender { get; set; }
  • 支援枚舉和Bool類型的導入數據驗證項的生成,以及相關數據轉換
    • 枚舉默認情況下會自動獲取枚舉的描述、顯示名、名稱和值生成數據項 /// <summary> /// 學生狀態 正常、流失、休學、勤工儉學、頂崗實習、畢業、參軍 /// </summary> public enum StudentStatus { /// <summary> /// 正常 /// </summary> [Display(Name = "正常")] Normal = 0, /// <summary> /// 流失 /// </summary> [Description("流水")] PupilsAway = 1, /// <summary> /// 休學 /// </summary> [Display(Name = "休學")] Suspension = 2, /// <summary> /// 勤工儉學 /// </summary> [Display(Name = "勤工儉學")] WorkStudy = 3, /// <summary> /// 頂崗實習 /// </summary> [Display(Name = "頂崗實習")] PostPractice = 4, /// <summary> /// 畢業 /// </summary> [Display(Name = "畢業")] Graduation = 5, /// <summary> /// 參軍 /// </summary> [Display(Name = "參軍")] JoinTheArmy = 6, }
    • bool類型默認會生成「是」和「否」的數據項
    • 如果已設置自定義值映射,則不會生成默認選項
  • 支援excel多Sheet導入
  • 支援Excel模板導出
  • 支援Excel導入模板生成標註

更新歷史

2019.03.06

  • 【Nuget】版本更新到2.1.3
  • 【Excel導入】修復GUID類型的問題。問題見(https://github.com/dotnetcore/Magicodes.IE/issues/44)。

2019.02.25

  • 【Nuget】版本更新到2.1.2
  • 【導入導出】已支援CSV
  • 【文檔】完善Pdf導出文檔

2019.02.24

  • 【Nuget】版本更新到2.1.1-beta
  • 【導入】Excel導入支援導入標註,僅需設置ExcelImporterAttribute的ImportDescription屬性,即會在頂部生成Excel導入說明
  • 【重構】添加兩個介面
    • IExcelExporter:繼承自IExporter, IExportFileByTemplate,Excel特有的API將在此補充
    • IExcelImporter:繼承自IImporter,Excel特有的API在此補充,例如「ImportMultipleSheet」、「ImportSameSheets」
  • 【重構】增加實例依賴注入
  • 【構建】完成程式碼覆蓋率的DevOps的配置

2019.02.14

  • 【Nuget】版本更新到2.1.0
  • 【導出】PDF導出支援.NET 4.6.1,具體見單元測試

2019.02.13

  • 【Nuget】版本更新到2.0.2
  • 【導入】修復單列導入的Bug,單元測試「OneColumnImporter_Test」。問題見(https://github.com/dotnetcore/Magicodes.IE/issues/35)。
  • 【導出】修復導出HTML、Pdf、Word時,模板在某些情況下編譯報錯的問題。
  • 【導入】重寫空行檢查。

2019.02.11

  • 【Nuget】版本更新到2.0.0
  • 【導出】Excel模板導出修復多個Table渲染以及合併單元格渲染的問題,具體見單元測試「ExportByTemplate_Test1」。問題見(https://github.com/dotnetcore/Magicodes.IE/issues/34)。
  • 【導出】完善模板導出的單元測試,針對導出結果添加渲染檢查,確保所有單元格均已渲染。

2019.02.05

  • 【Nuget】版本更新到2.0.0-beta4
  • 【導入】支援列篩選器(需實現介面【IImportHeaderFilter】),可用於兼容多語言導入等場景,具體見單元測試【ImportHeaderFilter_Test】
  • 【導入】支援傳入標註文件路徑,不傳參則默認同目錄"_"後綴保存
  • 【導入】完善單元測試【ImportResultFilter_Test】
  • 【其他】修改【ValueMappingAttribute】的命名空間為Magicodes.ExporterAndImporter.Core

2019.02.04

  • 【Nuget】版本更新到2.0.0-beta2
  • 【導入】支援導入結果篩選器——IImportResultFilter,可用於多語言場景的錯誤標註,具體使用見單元測試【ImportResultFilter_Test】
  • 【其他】修改IExporterHeaderFilter的命名空間為Magicodes.ExporterAndImporter.Core.Filters

2019.01.18

  • 【Nuget】版本更新到2.0.0-beta1
  • 【導出】完全重構整個導出Excel模組並且重寫大部分介面
  • 【導出】支援列頭篩選器——IExporterHeaderFilter,具體使用見單元測試
  • 【導出】修復轉換DataTable時支援為空類型
  • 【導出】導出Excel支援拆分Sheet,僅需設置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,為0則不拆分。具體見單元測試
  • 【導出】修復導出結果無法篩選的問題。目前導出即為數據表
  • 【導出】添加擴展方法ToExcelExportFileInfo
  • 【導出】IExporter再添加兩個動態DataTable導出方法,無需定義Dto即可動態導出數據,並且支援表頭篩選器、Sheet拆分
        /// <summary>          ///     導出Excel          /// </summary>          /// <param name="fileName">文件名稱</param>          /// <param name="dataItems">數據</param>          /// <param name="exporterHeaderFilter">表頭篩選器</param>          /// <param name="maxRowNumberOnASheet">一個Sheet最大允許的行數,設置了之後將輸出多個Sheet</param>          /// <returns>文件</returns>          Task<ExportFileInfo> Export(string fileName, DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000);            /// <summary>          ///     導出Excel          /// </summary>          /// <param name="dataItems">數據</param>          /// <param name="exporterHeaderFilter">表頭篩選器</param>          /// <param name="maxRowNumberOnASheet">一個Sheet最大允許的行數,設置了之後將輸出多個Sheet</param>          /// <returns>文件二進位數組</returns>          Task<byte[]> ExportAsByteArray(DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = null, int maxRowNumberOnASheet = 1000000);

2019.01.16

  • 【Nuget】版本更新到1.4.25
  • 【導出】修復沒有定義導出特性會報錯的情形,具體見單元測試「ExportTestDataWithoutExcelExporter_Test」。問題見(https://github.com/dotnetcore/Magicodes.IE/issues/21)。

2019.01.16

  • 【Nuget】版本更新到1.4.24
  • 【導出】修復日期格式默認導出數字的Bug,默認輸出「yyyy-MM-dd」,可以通過設置「[ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]」來修改。問題見(https://github.com/dotnetcore/Magicodes.IE/issues/22)。

2019.01.14

  • 【Nuget】版本更新到1.4.21
  • 【導出】Excel模板導出修複數據項為Null報錯的Bug。

2019.01.09

  • 【Nuget】版本更新到1.4.20
  • 【導出】Excel模板導出性能優化。5000條表格數據1秒內完成,具體見單元測試ExportByTemplate_Large_Test。

2019.01.08

  • 【Nuget】版本更新到1.4.18
  • 【導入】支援導入最大數量限制
    • ImporterAttribute支援MaxCount設置,默認為50000
    • 完成相關單元測試

2019.01.07

  • 【Nuget】版本更新到1.4.17
  • 【重構】重構IExportFileByTemplate中的ExportByTemplate,將參數htmlTemplate改為template。以便支援Excel模板導出。
  • 【導出】支援Excel模板導出並填寫相關單元測試,如何使用見教程《Excel模板導出之導出教材訂購表》
    • 支援單元格單個綁定
    • 支援列表

2019.12.17

  • 【Nuget】版本更新到1.4.16
  • 【導入】Excel導入支援多sheet導入,感謝tanyongzheng(https://github.com/dotnetcore/Magicodes.IE/pull/18)

2019.12.10

  • 【Nuget】版本更新到1.4.15
  • 【測試】單元測試添加多框架版本支援 (https://docs.xin-lai.com/2019/12/10/%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3/Magicodes.IE%E7%BC%96%E5%86%99%E5%A4%9A%E6%A1%86%E6%9E%B6%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81%E5%92%8C%E6%89%A7%E8%A1%8C%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/)
  • 【修復】修復部分.NET Framework 461下的問題

2019.12.06

  • 【Nuget】版本更新到1.4.14
  • 【重構】大量重構
    • 移除部分未使用的程式碼
    • 將TemplateFileInfo重命名為ExportFileInfo
    • 將IExporterByTemplate介面拆分為4個介面:IExportListFileByTemplate, IExportListStringByTemplate, IExportStringByTemplate, IExportFileByTemplate,並修改相關實現
    • 重構ImportHelper部分程式碼
  • 【導入】修復導入Excel時表頭設置的問題,已對此編寫單元測試,見【產品資訊導入】
  • 【完善】編寫ExportAsByteArray對於DataTable的單元測試,ExportWordFileByTemplate_Test

2019.11.25

  • 【Nuget】版本更新到1.4.13
  • 【導出】Pdf導出支援特性配置,詳見單元測試【導出豎向排版收據】。目前主要支援以下設置:
    • Orientation:排版方向(橫排、豎排)
    • PaperKind:紙張類型,默認A4
    • IsEnablePagesCount:是否啟用分頁數
    • Encoding:編碼設置,默認UTF8
    • IsWriteHtml:是否輸出HTML模板,如果啟用,則會輸出.html後綴的對應的HTML文件,方便調錯
    • HeaderSettings:頭部設置,通常可以設置頭部的分頁內容和資訊
    • FooterSettings:底部設置

2019.11.24

  • 【Nuget】版本更新到1.4.12
  • 【導出】導出動態類支援超過100W數據時自動拆分Sheet(具體見PR:https://github.com/xin-lai/Magicodes.IE/pull/14)

2019.11.20

  • 【Nuget】版本更新到1.4.11
  • 【導出】修復Datatable列的順序和DTO的順序不一致,導致數據放錯列(具體見PR:https://github.com/xin-lai/Magicodes.IE/pull/13)

2019.11.16

  • 【Nuget】版本更新到1.4.10
  • 【導出】修復Pdf導出在多執行緒下的問題

2019.11.13

  • 【Nuget】版本更新到1.4.5
  • 【導出】修復導出Pdf在某些情況下可能會導致記憶體報錯的問題
  • 【導出】添加批量導出收據單元測試示例,並添加大量數據樣本進行測試

2019.11.5

  • 【Nuget】版本更新到1.4.4
  • 【導入】修復枚舉類型的問題,並編寫單元測試
  • 【導入】增加值映射,支援通過「ValueMappingAttribute」特性設置值映射關係。用於生成導入模板的數據驗證約束以及進行數據轉換。
  • 【導入】優化枚舉和Bool類型的導入數據驗證項的生成,以便於模板生成和數據轉換
    • 枚舉默認情況下會自動獲取枚舉的描述、顯示名、名稱和值生成數據項
    • bool類型默認會生成「是」和「否」的數據項
    • 如果已設置自定義值映射,則不會生成默認選項
  • 【導入】支援枚舉可為空類型

2019.10.30

  • 【Nuget】版本更新到1.4.0
  • 【導出】Excel導出支援動態列導出(基於DataTable),感謝張善友(https://github.com/xin-lai/Magicodes.IE/pull/8 )

2019.10.22

  • 【Nuget】版本更新到1.3.7
  • 【導入】修復忽略列的驗證問題
  • 【導入】修正驗證錯誤資訊,一行僅允許存在一條數據
  • 【導入】修復忽略列在某些情況下可能引發的異常
  • 【導入】添加存在忽略列的導入情形下的單元測試

2019.10.21

  • 【Nuget】版本更新到1.3.4
  • 【導入】支援設置忽略列,以便於在Dto定義數據列做處理或映射

2019.10.18

  • 【優化】優化.NET標準庫2.1下集合轉DataTable的性能
  • 【重構】多處IList修改為ICollection
  • 【完善】補充部分單元測試

2019.10.12

  • 【重構】重構HTML、PDF導出等邏輯,並修改IExporterByTemplate為:
    • Task ExportListByTemplate(IList dataItems, string htmlTemplate = null) where T : class;
    • Task ExportByTemplate(T data, string htmlTemplate = null) where T : class;
  • 【示例】添加收據導出的單元測試示例

2019.9.28

  • 【導出】修改默認的導出HTML、Word、Pdf模板
  • 【導入】添加截斷行的單元測試,以測試中間空格和結尾空格
  • 【導入】將【數據錯誤檢測】和【導入】單元測試的Dto分開,確保全部單元測試通過
  • 【文檔】更新文檔

2019.9.26

  • 【導出】支援導出Word、Pdf、HTML,支援自定義導出模板
  • 【導出】添加相關導出的單元測試
  • 【導入】支援重複驗證,需設置ImporterHeader特性的IsAllowRepeat為false

2019.9.19

  • 【導入】支援截止列設置,如未設置則默認遇到空格截止
  • 【導入】導入支援通過特性設置Sheet名稱

2019.9.18

  • 【導入】重構導入模組
  • 【導入】統一導入錯誤消息
    • Exception :導入異常資訊
    • RowErrors :數據錯誤資訊
    • TemplateErrors :模板錯誤資訊,支援錯誤分級
    • HasError : 是否存在錯誤(僅當出現異常並且錯誤等級為Error時返回true)
  • 【導入】基礎類型必填自動識別,比如int、double等不可為空類型自動識別,無需額外設置Required
  • 【導入】修改Excel模板的Sheet名稱
  • 【導入】支援導入表頭位置設置,默認為1
  • 【導入】支援列亂序(導入模板的列序號不再需要固定)
  • 【導入】支援列索引設置
  • 【導入】支援將導入的Excel進行錯誤標註,支援多個錯誤
  • 【導入】加強對基礎類型和可為空類型的支援
  • 【EPPlus】由於EPPlus.Core已經不維護,將EPPlus的包從EPPlus.Core改為EPPlus

2019.9.11

  • 【導入】導入支援自動去除前後空格,默認啟用,可以針對列進行關閉,具體見AutoTrim設置
  • 【導入】導入Dto的欄位允許不設置ImporterHeader,支援通過DisplayAttribute特性獲取列名
  • 【導入】導入的Excel移除對Sheet名稱的約束,默認獲取第一個Sheet
  • 【導入】導入增加對中間空格的處理支援,需設置FixAllSpace
  • 【導入】導入完善對日期類型的支援
  • 【導入】完善導入的單元測試

轉載是一種動力 分享是一種美德

作者:magiccodes

如果喜歡作者的文章,請關注【麥扣聊技術】訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊資訊科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

文檔官網:docs.xin-lai.com