专栏首页雪雁的专栏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包

主要更新

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

转载是一种动力 分享是一种美德

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

文档官网:docs.xin-lai.com

本文分享自微信公众号 - magiccodes(xl----0),作者:magiccodes

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Magicodes.IE 2.1发布

    如上图所示,Magicodes.IE 2.1主要完成了以下内容(具体可以访问GitHub):

    心莱科技雪雁
  • 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分

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

    心莱科技雪雁
  • 《.NET Core 和前后端那些事儿》技术交流活动纪实

    2019年3月10日,下午,在位于沁园春御院的长沙市互联网活动基地,在长沙市.NET技术社区的组织下,长沙市.NET技术圈第一次纯粹的技术沙龙在这里召开。这次活...

    心莱科技雪雁
  • Magicodes.IE 2.0发布

    Magicodes.IE是我们维护的开源的导入导出通用库,去年年底已加入NCC开源组织。

    雪雁-心莱科技
  • Radiant: 基于Ruby on Rails的内容管理系统

    Radiant是一个开源的CMS[内容管理系统],建立于Ruby on Rails。Radiant是为一些小的开发团队而创建的[Publishing for S...

    用户1172164
  • MySQL 的 crash-safe 原理解析

    MySQL作为当下最流行的开源关系型数据库,有一个很关键和基本的能力,就是必须能够保证数据不会丢。那么在这个能力背后,MySQL是如何设计才能保证不管在什么时间...

    2020labs小助手
  • face++人脸识别与人脸库匹配python实现笔记二

    本文测试了person管理部分,具体的api手册请去官网学习。目标是实现刷脸签到系统。测试功能的源码可以在github上看到https://github.com...

    十四君
  • [PHP] 实现oauth下的单点登陆

    整体流程是 ,参照腾讯企业邮的对外开放API , 传递client_id + client_secret就可以获取到access_token , 拿着acces...

    陶士涵
  • 更小更快更易用的Angular5管中窥豹

    这一段时间留意到Angular5的版本更新速度飞快,几乎两三天就一个版本,我就知道它快要来了。

    IT晴天
  • Zookeeper02之集群环境搭建

      在上文的基础上本文来介绍下zookeeper的集群搭建。准备环境如果不清楚的可以参考上文:

    用户4919348

扫码关注云+社区

领取腾讯云代金券