Magicodes.IE 2.0釋出
Magicodes.IE 2.0釋出
Magicodes.IE是我們維護的開源的匯入匯出通用庫,去年年底已加入NCC開源組織。
Github地址:https://github.com/xin-lai/Magicodes.IE
Magicodes.IE不是一蹴而就,而是根據實際需求不斷迭代出來的,而且歷經多次重構。這一次,趁著春節假期,我們重構併發布了Magicodes.IE 2.0。在這裡尤其要感謝一位小夥伴,@hueifeng https://github.com/hueifeng,感謝其在春節期間為Magicodes.IE做出的文件貢獻。
由於個人和團隊精力有限,Magicodes.IE非常迫切地希望能得到大家的幫助和支援,尤其是程式碼和文件貢獻。如有意向,可以提交PR或者和我直接聯絡(公眾號或QQ群均可)。
相關Nuget包
名稱 | Nuget |
---|---|
Magicodes.IE.Core | NuGet |
Magicodes.IE.Excel | NuGet |
Magicodes.IE.Pdf | NuGet |
Magicodes.IE.Word | NuGet |
Magicodes.IE.Html | NuGet |
主要更新
Magicodes.IE 2.0主要更新如下所示:
-
完全重構整個匯出Excel模組並且重寫大部分介面
-
支援列頭篩選器——IExporterHeaderFilter,以便動態更改Excel匯出結果
public class TestExporterHeaderFilter1 : IExporterHeaderFilter { /// <summary> /// 表頭篩選器(修改名稱) /// </summary> /// <param name="exporterHeaderInfo"></param> /// <returns></returns> public ExporterHeaderInfo Filter(ExporterHeaderInfo exporterHeaderInfo) { if (exporterHeaderInfo.DisplayName.Equals("名稱")) { exporterHeaderInfo.DisplayName = "name"; } return exporterHeaderInfo; } }
-
支援匯入結果篩選器——IImportResultFilter,可用於多語言場景的錯誤標註
public class ImportResultFilterTest : IImportResultFilter { /// <summary> /// 本示例修改資料錯誤驗證結果,可用於多語言等場景 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="importResult"></param> /// <returns></returns> public ImportResult<T> Filter<T>(ImportResult<T> importResult) where T : class, new() { var errorRows = new List<int>() { 5,6 }; var items = importResult.RowErrors.Where(p => errorRows.Contains(p.RowIndex)).ToList(); for (int i = 0; i < items.Count; i++) { for (int j = 0; j < items[i].FieldErrors.Keys.Count; j++) { var key = items[i].FieldErrors.Keys.ElementAt(j); var value = items[i].FieldErrors[key]; items[i].FieldErrors[key] = value?.Replace("存在資料重複,請檢查!所在行:", "Duplicate data exists, please check! Where:"); } } return importResult; } }
-
支援列篩選器(需實現介面【IImportHeaderFilter】),可用於相容多語言匯入等場景
/// <summary> /// 匯入列頭篩選器測試 /// 1)測試修改列頭 /// 2)測試修改值對映 /// </summary> public class ImportHeaderFilterTest : IImportHeaderFilter { public List<ImporterHeaderInfo> Filter(List<ImporterHeaderInfo> importerHeaderInfos) { foreach (var item in importerHeaderInfos) { if (item.PropertyName == "Name") { item.Header.Name = "Student"; } else if (item.PropertyName == "Gender") { item.MappingValues = new Dictionary<string, dynamic>() { {"男",0 }, {"女",1 } }; } } return importerHeaderInfos; } }
-
匯出Excel支援拆分Sheet,僅需設定特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,為0則不拆分
[ExcelExporter(Name = "測試", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = 100)] public class ExportTestDataWithSplitSheet
-
Excel模板匯出優化
-
優化匯出效能
-
修復資料項為NULL的異常
-
修復多個Table渲染以及合併單元格渲染的問題
-
-
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);
-
支援傳入標註檔案路徑,不傳參則默認同目錄”_”字尾儲存
-
修復日期格式預設匯出數字的Bug,預設輸出“yyyy-MM-dd”,可以通過設定“[ExporterHeader(DisplayName = “日期2”, Format = “yyyy-MM-dd HH:mm:ss”)]”來修改。
-
修復沒有定義匯出特性會報錯的情形。
-
修復轉換DataTable時支援為空型別
-
修復匯出結果無法篩選的問題
-
完善相關單元測試
-
完善部分文件並完成:
- 基礎教程之匯出Excel
- 基礎教程之匯出Pdf收據
2.1版本預覽
2.1規劃如下,由於精力有限,具體時間待定:
- Excel支援圖片匯入匯出
- Pdf匯出支援.NET461
- CSV匯入匯出支援
最後
由於個人和團隊精力有限,Magicodes.IE非常迫切地希望能得到大家的幫助和支援,尤其是程式碼和文件貢獻。如有意向,可以提交PR或者和我直接聯絡(公眾號或QQ群均可)。