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>()
    {
    ,
    };
    var items = importResult.RowErrors.Where(p => errorRows.Contains(p.RowIndex)).ToList(); for (int i = ; i < items.Count; i++)
    {
    for (int j = ; 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>()
    {
    {"男", },
    {"女", }
    };
    }
    }
    return importerHeaderInfos;
    }
    }
  • 导出Excel支持拆分Sheet,仅需设置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,为0则不拆分

    [ExcelExporter(Name = "测试", TableStyle = "Light10", AutoFitAllColumn = true, MaxRowNumberOnASheet = )]
    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 = ); /// <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 = );
  • 支持传入标注文件路径,不传参则默认同目录”_”后缀保存

  • 修复日期格式默认导出数字的Bug,默认输出“yyyy-MM-dd”,可以通过设置“[ExporterHeader(DisplayName = “日期2”, Format = “yyyy-MM-dd HH:mm:ss”)]”来修改。

  • 修复没有定义导出特性会报错的情形。

  • 修复转换DataTable时支持为空类型

  • 修复导出结果无法筛选的问题

  • 完善相关单元测试

  • 完善部分文档并完成:

2.1版本预览

2.1规划如下,由于精力有限,具体时间待定:

最后

由于个人和团队精力有限,Magicodes.IE非常迫切地希望能得到大家的帮助和支持,尤其是代码和文档贡献。如有意向,可以提交PR或者和我直接联系(公众号或QQ群均可)。

Magicodes.IE 2.0发布的更多相关文章

  1. Magicodes.IE 2.2发布

    Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.已加入NCC开源组织. Magicodes.IE 2.0发布 Magico ...

  2. Visual Studio Code 1.0发布,支持中文在内9种语言

    Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...

  3. Apache Flume 1.7.0 发布,日志服务器

    Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...

  4. Percona Server 5.6.33-79.0 发布

    Percona Server 5.6.33-79.0 发布了,该版本基于 MySQL 5.6.33,包含了所有的 bug 修复,是Percona Server 5.6 系列中的正式版本.该版本主要是修 ...

  5. Rubinius 2.0 发布,Ruby 虚拟机

    Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...

  6. Restful.Data v2.0发布,谢谢你们的支持和鼓励

    v1.0发布后,承蒙各位博友们的热心关注,也给我不少意见和建议,在此我真诚的感谢 @冰麟轻武 等朋友,你们的支持和鼓励,是这个开源项目最大的推动力. v2.0在除了细枝末节外,在功能上主要做了一下更新 ...

  7. 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!

    网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...

  8. Redisson-Parent 2.5.0 和 3.0.0 发布

    Redisson-Parent 2.5.0 和 3.0.0 发布了,Redisson 是基于 Redis 服务之上构建的分布式.可伸缩的 Java 数据结构,高级的 Redis 客户端. Rediss ...

  9. Rsync 3.1.0 发布,文件同步工具

    文件同步工具Rsync 3.1.0发布.2013-09-29 上一个版本还是2011-09-23的3.0.9 过了2年多.Rsync基本是Linux上文件同步的标准了,也可以和inotify配合做实时 ...

随机推荐

  1. Qt listWidget和QListWidgetItem的简单使用

    简单的来实习了下 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QListWid ...

  2. 洛谷$P4585\ [FJOI2015]$火星商店问题 线段树+$trie$树

    正解:线段树+$trie$树 解题报告: 传送门$QwQ$ $umm$题目有点儿长我先写下题目大意趴$QwQ$,就说有$n$个初始均为空的集合和$m$次操作,每次操作为向某个集合内加入一个数$x$,或 ...

  3. Redo与Undo的理解

    本文概要本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写.但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节 ...

  4. 初入webpack

    为什么需要构建工具? 通过caniuse我们了解到 现代浏览器对es6特性的支持程度: 由于现代浏览器对es6特性的支持度并不能说太高,为了兼容所以需要进行 es6语法的转换,除了此,三大框架的语法特 ...

  5. [UWP]XAML中的响应式布局技术

    响应式布局的概念是一个页面适配多个终端及不同分辨率.在针对特定屏幕宽度优化应用 UI 时,我们将此称为创建响应式设计.WPF设计之初响应式设计的概念并不流行,那时候大部分网页设计师都按着宽度960像素 ...

  6. Kafka原理及应用(一)

    一. Kafka简介 (1) 消息中间件的两种实现模式 JMS (Java Message Service) 对消息的发送和接收定义了两种模式: 点对点模式:消息的生产和消费者均只有一个,消息由生产者 ...

  7. C#录制视频

    这是一个使用C#语言制作的录制框架,支持录制桌面,多屏,声音,摄像头,某个应用程序的界面 1.安装 使用此框架需要安装扩展包Kogel.Record,可以Nuget上搜索 或者使用Nuget命令 In ...

  8. Pandas常用方法手册

    关键缩写和包导入 在这个速查手册中,我们使用如下缩写: df:任意的Pandas DataFrame对象 同时我们需要做如下的引入: import pandas as pd 导入数据 pd.read_ ...

  9. 动态代理之 JDK 动态代理

    动态代理 动态代理源于设计模式中的代理模式,代理模式的主要作用就是使代理对象完成用户的请求,屏蔽用户对真实对象的访问.通过代理对象去访问目标对象来控制原对象的访问. 代理模式的最典型的应用就是 Spr ...

  10. 关于Integer 和Double包装类创建对象时的底层解析

    public void method1() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i ...