Magicodes.IE 2.0發佈

Magicodes.IE是我們維護的開源的導入導出通用庫,去年年底已加入NCC開源組織。

Github地址:https://github.com/xin-lai/Magicodes.IEMagicodes.IE不是一蹴而就,而是根據實際需求不斷迭代出來的,而且歷經多次重構。這一次,趁著春節假期,我們重構併發布了Magicodes.IE 2.0。在這裡尤其要感謝一位小夥伴,@hueifenghttps://github.com/hueifeng,感謝其在春節期間為Magicodes.IE做出的文檔貢獻。由於個人和團隊精力有限,Magicodes.IE非常迫切地希望能得到大家的幫助和支持,尤其是代碼和文檔貢獻。如有意向,可以提交PR或者和我直接聯繫(公眾號或QQ群均可)。

相關Nuget包

Magicodes.IE 2.0发布
Magicodes.IE 2.0发布

主要更新

Magicodes.IE 2.0主要更新如下所示:

  • 完全重構整個導出Excel模塊並且重寫大部分接口

  • 支持列頭篩選器——IExporterHeaderFilter,以便動態更改Excel導出結果

  • <code>public class TestExporterHeaderFilter1 : IExporterHeaderFilter/<code><code>{/<code><code> /// <summary>/<code><code> /// 表頭篩選器(修改名稱)/<code><code> /// /<code><code> /// <param>/<code><code> /// <returns>/<code><code> public ExporterHeaderInfo Filter(ExporterHeaderInfo exporterHeaderInfo)/<code><code> {/<code><code> if (exporterHeaderInfo.DisplayName.Equals("名稱"))/<code><code> {/<code><code> exporterHeaderInfo.DisplayName = "name";/<code><code> }/<code><code> return exporterHeaderInfo;/<code><code> }/<code><code> }/<code>
  • 支持導入結果篩選器——IImportResultFilter,可用於多語言場景的錯誤標註

<code>public class ImportResultFilterTest : IImportResultFilter/<code><code>{/<code><code> /// <summary>/<code><code> /// 本示例修改數據錯誤驗證結果,可用於多語言等場景/<code><code> /// /<code><code> /// <typeparam>/<code><code> /// <param>/<code><code> /// <returns>/<code><code> public ImportResult Filter(ImportResult importResult) where T : class, new/<code><code> {/<code><code> var errorRows = new List/<code><code> {/<code><code> 5,6/<code><code> };/<code><code> var items = importResult.RowErrors.Where(p => errorRows.Contains(p.RowIndex)).ToList;/<code>
<code> for (int i = 0; i < items.Count; i++)/<code><code> {/<code><code> for (int j = 0; j < items[i].FieldErrors.Keys.Count; j++)/<code><code> {/<code><code> var key = items[i].FieldErrors.Keys.ElementAt(j);/<code><code> var value = items[i].FieldErrors[key];/<code><code> items[i].FieldErrors[key] = value?.Replace("存在數據重複,請檢查!所在行:", "Duplicate data exists, please check! Where:");/<code><code> }/<code><code> }/<code><code> return importResult;/<code><code> }/<code><code>}/<code>
  • 支持列篩選器(需實現接口【IImportHeaderFilter】),可用於兼容多語言導入等場景

  • <code>/// <summary>/<code><code>/// 導入列頭篩選器測試/<code><code>/// 1)測試修改列頭/<code><code>/// 2)測試修改值映射/<code><code>/// /<code><code>public class ImportHeaderFilterTest : IImportHeaderFilter/<code><code>{/<code><code> public List<importerheaderinfo> Filter(List<importerheaderinfo> importerHeaderInfos)/<importerheaderinfo>/<importerheaderinfo>/<code><code> {/<code><code> foreach (var item in importerHeaderInfos)/<code><code> {/<code><code> if (item.PropertyName == "Name")/<code><code> {/<code><code> item.Header.Name = "Student";/<code><code> }/<code><code> else if (item.PropertyName == "Gender")/<code><code> {/<code><code> item.MappingValues = new Dictionary<string>/<code><code> {/<code><code> {"男",0 },/<code><code> {"女",1 }/<code><code> };/<code><code> }/<code><code> }/<code><code> return importerHeaderInfos;/<code><code> }/<code><code>}/<code>
  • 導出Excel支持拆分Sheet,僅需設置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,為0則不拆分

  • <code>[ExcelExporter(Name = "測試", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = 100)]/<code><code>public class ExportTestDataWithSplitSheet/<code>
  • Excel模板導出優化

優化導出性能修復數據項為的異常修復多個Table渲染以及合併單元格渲染的問題

IExporter再添加兩個動態DataTable導出方法,無需定義Dto即可動態導出數據,並且支持表頭篩選器、Sheet拆分

<code>/// <summary>/<code><code> /// 導出Excel/<code><code> /// /<code><code> /// <param>文件名稱/<code><code> /// <param>數據/<code><code> /// <param>表頭篩選器/<code><code> /// <param>一個Sheet最大允許的行數,設置了之後將輸出多個Sheet/<code><code> /// <returns>文件/<returns>/<code><code> Task<exportfileinfo> Export(string fileName, DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = , int maxRowNumberOnASheet = 1000000);/<exportfileinfo>/<code>

<code>/// <summary>/<code><code> /// 導出Excel/<code><code> /// /<code><code> /// <param>數據/<code><code> /// <param>表頭篩選器/<code><code> /// <param>一個Sheet最大允許的行數,設置了之後將輸出多個Sheet/<code><code> /// <returns>文件二進制數組/<returns>/<code><code> Task<byte> ExportAsByteArray(DataTable dataItems, IExporterHeaderFilter exporterHeaderFilter = , int maxRowNumberOnASheet = 1000000);/<byte>/<code>

  • 支持傳入標註文件路徑,不傳參則默認同目錄”_”後綴保存

  • 修復日期格式默認導出數字的Bug,默認輸出“yyyy-MM-dd”,可以通過設置“[ExporterHeader(DisplayName = “日期2”, Format = “yyyy-MM-dd HH:mm:ss”)]”來修改。

  • 修復沒有定義導出特性會報錯的情形。

  • 修復轉換DataTable時支持為空類型

  • 修復導出結果無法篩選的問題

  • 完善相關單元測試

  • 完善部分文檔並完成:

    • 基礎教程之導出Excel

      https://github.com/dotnetcore/Magicodes.IE/blob/master/docs/2.%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B%E4%B9%8B%E5%AF%BC%E5%87%BAExcel.md
    • 基礎教程之導出Pdf收據

      https://github.com/dotnetcore/Magicodes.IE/blob/master/docs/3.%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B%E4%B9%8B%E5%AF%BC%E5%87%BAPdf%E6%94%B6%E6%8D%AE.md

2.1版本預覽

2.1規劃如下,由於精力有限,具體時間待定:

  • Excel支持圖片導入導出

    https://github.com/dotnetcore/Magicodes.IE/issues/28
  • Pdf導出支持.NET461

    https://github.com/dotnetcore/Magicodes.IE/issues/27
  • CSV導入導出支持

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

最後

由於個人和團隊精力有限,Magicodes.IE非常迫切地希望能得到大家的幫助和支持,尤其是代碼和文檔貢獻。如有意向,可以提交PR或者和我直接聯繫(公眾號或QQ群均可)。

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


分享到:


相關文章: