天天看點

Magicodes.IE 2.0釋出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渲染以及合并單元格渲染的問題
    Magicodes.IE 2.0釋出Magicodes.IE 2.0釋出
  • 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群均可)。