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