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
NuGet
Magicodes.IE.Excel
NuGet
NuGet
Magicodes.IE.Pdf
NuGet
NuGet
Magicodes.IE.Word
NuGet
NuGet
Magicodes.IE.Html
NuGet
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時支持為空類型

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

  • 完善相關單元測試

  • 完善部分文檔並完成:

2.1版本預覽

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

最后

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM