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群均可)。