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

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


分享到:


相關文章: