Magicodes.IE
導入導出通用庫,支持Dto導入導出以及動態導出,支持Excel、Word、Pdf、Csv和Html。已加入NCC開源組織。
- Github:https://github.com/dotnetcore/Magicodes.IE
- 碼雲(手動同步,不維護):https://gitee.com/magicodes/Magicodes.IE
- 特點、詳細說明、教程、Nuget、注意事項、里程碑、FAQ、更新歷史見下文
一旦成為貢獻者,我們將會邀請您加入Magicodes.IE管理委員會的微信群,並擁有相關的投票權。
最新版本:2.2.0
2.2版本內容
2020.05.12
- 【Nuget】版本更新到2.2.0
- 【Excel模板導出】支持導出字節
- 【文檔】Magicodes.IE Csv導入導出
- 【Excel導入導出】修復標注的添加問題
- 【導出】ASP.NET Core Web API 中使用自定義格式化程序導出Excel、Pdf、Csv等內容 #64
- 【導入導出】支持使用System.ComponentModel.DataAnnotations命名空間下的部分特性來控制導入導出 #63
2020.04.16
- 【Nuget】版本更新到2.2.0-beta9
- 【Excel模板導出】修復只存在一列時的導出 #73
- 【Excel導入】支持返回表頭和索引 #76
- 【Excel導入導入】#63
- 支持使用System.ComponentModel.DataAnnotations命名空間下的部分特性來控制導入導出,比如
- DisplayAttribute
- DisplayFormatAttribute
- DescriptionAttribute
- 封裝簡單的易於使用的單一特性,例如
- IEIgnoreAttribute(可作用於屬性、枚舉成員,可影響導入和導出)
- 支持使用System.ComponentModel.DataAnnotations命名空間下的部分特性來控制導入導出,比如
2020.04.02
-
【Nuget】版本更新到2.2.0-beta8
-
【Excel模板導出】支持圖片 #62,渲染語法如下所示:
{{Image::ImageUrl?Width=50&Height=120&Alt=404}} {{Image::ImageUrl?w=50&h=120&Alt=404}} {{Image::ImageUrl?Alt=404}}
2020.03.29
- 【Nuget】版本更新到2.2.0-beta7
- 【Excel模板導出】修復渲染問題 #51
2020.03.27
- 【Nuget】版本更新到2.2.0-beta6
- 【Excel導入導出】修復.NET Core 2.2的包引用問題 #68
2020.03.26
- 【Nuget】版本更新到2.2.0-beta4
- 【Excel多Sheet導出】修復#66,並添加單元測試
2020.03.25
2020.03.19
- 【Nuget】版本更新到2.2.0-beta2
- 【Excel導入】修復日期格式的導入Bug,支持DateTime和DateTimeOffset以及可為空類型,默認支持本地化時間格式(默認根據地區自動使用本地日期時間格式)
- 【Excel導入導出】添加單元測試ExportAndImportUseOneDto_Test,對使用同一個Dto導出並導入進行測試。Issue見 #53
2020.03.18
- 【Nuget】版本更新到2.2.0-beta1
- 【Excel導出】添加以下API:
/// <summary> /// 追加集合到當前導出程序 /// append the collection to context /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dataItems"></param> /// <returns></returns> ExcelExporter Append<T>(ICollection<T> dataItems) where T : class; /// <summary> /// 導出所有的追加數據 /// export excel after append all collectioins /// </summary> /// <param name="fileName"></param> /// <returns></returns> Task<ExportFileInfo> ExportAppendData(string fileName); /// <summary> /// 導出所有的追加數據 /// export excel after append all collectioins /// </summary> /// <param name="fileName"></param> /// <returns></returns> Task<byte[]> ExportAppendDataAsByteArray();
- 【Excel導出】支持多個實體導出多個Sheet,感謝@ccccccmd 的貢獻 #pr52 ,Issue見 #50。使用代碼參考,具體見單元測試(ExportMutiCollection_Test):
var exporter = new ExcelExporter(); var list1 = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>(); var list2 = GenFu.GenFu.ListOf<ExportTestDataWithSplitSheet>(30); var result = exporter.Append(list1).Append(list2).ExportAppendData(filePath);
瘋狂的徽章
https://dev.azure.com/xinlaiopencode/Magicodes.IE/_build?definitionId=4&_a=summary
里程碑
# | 狀態 | 完成時間 | 里程碑情況 |
---|---|---|---|
3.0 | 🚢規划中 | 2020-12-31 | 待辦 |
2.2 | ☕進行中#46 | 2020-04-31 | 待辦 已完成 |
2.1 | 🚩已完成 | 2020-03-15 | 已完成 |
Nuget
名稱 | Nuget |
---|---|
Magicodes.IE.Core | ![]() |
Magicodes.IE.Excel | ![]() |
Magicodes.IE.Pdf | ![]() |
Magicodes.IE.Word | ![]() |
Magicodes.IE.Html | ![]() |
Magicodes.IE.Csv | ![]() |
Magicodes.IE.AspNetCore | ![]() |
Magicodes Nuget包推薦
名稱 | 說明 | Nuget | GitHUb |
---|---|---|---|
Magicodes.WeChat.MiniProgram | 小程序SDK | ![]() |
Magicodes.WxMiniProgram.Sdk |
Magicodes.Sms.Aliyun | 阿里雲短信 | ![]() |
xin-lai/Magicodes.Sms |
Magicodes.Sms.Core | 短信核心庫 | ![]() |
xin-lai/Magicodes.Sms |
Magicodes.Sms.Aliyun.Abp | 阿里雲短信Abp模塊 | ![]() |
xin-lai/Magicodes.Sms |
Magicodes.Storage.Core | 通用存儲核心庫 | ![]() |
xin-lai/Magicodes.Storage |
Magicodes.Storage.AliyunOss.Core | 阿里雲OSS存儲 | ![]() |
xin-lai/Magicodes.Storage |
Magicodes.Storage.Local.Core | 本地存儲 | ![]() |
xin-lai/Magicodes.Storage |
Magicodes.Storage.Tencent.Core | 騰訊雲存儲 | ![]() |
xin-lai/Magicodes.Storage |
Magicodes.Storage.Abp.Core | 通用存儲ABP模塊集成 | ![]() |
xin-lai/Magicodes.Storage |
Magicodes.WeChat.SDK.Core | 微信SDK | ![]() |
xin-lai/Magicodes.WeChat.SDK |
Magicodes.SwaggerUI | SwaggerUI API快速配置和分組 | ![]() |
xin-lai/Magicodes.SwaggerUI |
Magicodes.Pay.Alipay | 支付寶支付庫 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Notify | 支付通用回調庫 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Wxpay | 微信支付庫 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Alipay.Global | 國際支付寶支付庫 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Allinpay | 通聯支付庫 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Abp | ABP 支付通用封裝庫 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Abp.Allinpay | ABP 通聯支付模塊 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Abp.Wxpay | ABP 微信支付模塊 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Alipay.Global | ABP 國際支付寶模塊 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Pay.Alipay | ABP 支付寶模塊 | ![]() |
xin-lai/Magicodes.Pay |
Magicodes.Abp.Castle.NLog | ABP Nlog支持模塊 | ![]() |
xin-lai/Abp.Castle.NLog |
Magicodes.WxMiniProgram.Sdk | 微信小程序SDK | ![]() |
xin-lai/Magicodes.WxMiniProgram.Sdk |
Magicodes.WxMiniProgram.Sdk.Abp | 微信小程序SDK Abp模塊 | ![]() |
xin-lai/Magicodes.WxMiniProgram.Sdk |
Magicodes.Dingtalk.SDK | 釘釘SDK | ![]() |
xin-lai/Magicodes.Dingtalk.SDK |
Magicodes.DynamicSqlApi.Core | 根據SQL自動解析生成動態API | ![]() |
Magicodes.DynamicSqlApi |
Magicodes.DynamicSqlApi.All | 根據SQL自動解析生成動態API | ![]() |
Magicodes.DynamicSqlApi |
Magicodes.DynamicSqlApi.CsScript | 根據SQL自動解析生成動態API | ![]() |
Magicodes.DynamicSqlApi |
Magicodes.DynamicSqlApi.Dapper | 根據SQL自動解析生成動態API | ![]() |
Magicodes.DynamicSqlApi |
Magicodes.DynamicSqlApi.SqlServer | 根據SQL自動解析生成動態API | ![]() |
Magicodes.DynamicSqlApi |
注意
- Excel導入不支持“.xls”文件,即不支持Excel97-2003。
- 如需在Docker中使用,請參閱文檔中的《Docker中使用》一節。
- 相關功能均已編寫單元測試,在使用的過程中可以參考單元測試。
教程
-
動態導出(待補充)
-
多Sheet導入(待補充)
-
進階篇之導入導出篩選器(待補充)
-
Excel導出多個實體(待補充)
其他教程見下文或單元測試
更新歷史見下文。
特點
- 需配合相關導入導出的DTO模型使用,支持通過DTO以及相關特性控制導入導出。配置特性即可控制相關邏輯和顯示結果,無需修改邏輯代碼;
- 支持各種篩選器,以便支持多語言、動態控制列展示等場景,具體使用見單元測試:
- 導入列頭篩選器(可動態指定導入列、導入的值映射關系)
- 導出列頭篩選器(可動態控制導出列,支持動態導出(DataTable))
- 導入結果篩選器(可修改標注文件)
- 導出支持文本自定義過濾或處理;
- 導入支持中間空行自動跳過;
- 導入支持自動根據 DTO 生成導入模板,針對必填項將自動標注;
- 導入支持數據下拉選擇,目前僅支持枚舉類型;
- 導入數據支持前后空格以及中間空格處理,允許指定列進行設置;
- 導入支持模板自動檢查,數據自動校驗,異常統一處理,並提供統一的錯誤封裝,包含異常、模板錯誤和行數據錯誤;
- 支持導入表頭位置設置,默認為1;
- 支持導入列亂序,無需按順序一一對應;
- 支持導入指定列索引,默認自動識別;
- 導出Excel支持拆分Sheet,僅需設置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,為0則不拆分。具體見單元測試;
- 支持將導入Excel進行錯誤標注;
- 導入支持截止列設置,如未設置則默認遇到空格截止;
- 支持導出HTML、Word、Pdf,支持自定義導出模板;
- 導出HTML
- 導出Word
- 導出HTML
- 導出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模板導出,並且支持圖片渲染
渲染語法如下所示:
{{Company}} //單元格渲染 {{Table>>BookInfos|RowNo}} //表格渲染開始語法 {{Remark|>>Table}}//表格渲染結束語法 {{Image::ImageUrl?Width=50&Height=120&Alt=404}} //圖片渲染 {{Image::ImageUrl?w=50&h=120&Alt=404}} //圖片渲染 {{Image::ImageUrl?Alt=404}} //圖片渲染
后續將支持自定義管道。
- 支持Excel導入模板生成標注
-
支持Excel圖片導入導出
- 圖片導入
- 導入為Base64
- 導入到臨時目錄
- 導入到指定目錄
- 圖片導出
- 將文件路徑導出為圖片
- 將網絡路徑導出為圖片
- 圖片導入
-
支持多個實體導出多個Sheet
-
支持使用System.ComponentModel.DataAnnotations命名空間下的部分特性來控制導入導出#63
-
支持在ASP.NET Core Web API 中使用自定義格式化程序導出Excel、Pdf、Csv等內容#64
FAQ
https://github.com/dotnetcore/Magicodes.IE/issues?q=label%3Aquestion
其他開源庫