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. win32简单的sockeTCP协议通信

    什么也不说了看代码 首先是服务端代码 #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #i ...

  2. 后缀自动机&回文自动机学习笔记

    在学了一天其实是边学边摆之后我终于大概$get$后缀自动机了,,,就很感动,于是时隔多年我终于决定再写篇学习笔记辽$QwQ$ $umm$和$FFT$学习笔记一样,这是一篇单纯的$gql$的知识总结博, ...

  3. Synchronized解析——如果你愿意一层一层剥开我的心

    前言 synchronized,是解决并发情况下数据同步访问问题的一把利刃.那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟. Synchroni ...

  4. Python 线性回归(Linear Regression) - 到底什么是 regression?

    背景 学习 Linear Regression in Python – Real Python,对 regression 一词比较疑惑. 这个 linear Regression 中的 Regress ...

  5. mumu模拟器手Q自动化配置

    { "platformName": "Android", "platformVersion": "6.0.1", &qu ...

  6. 28.python操作excel表格(xlrd/xlwt)

    python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...

  7. GitHub上的计算机视觉学习资料推荐

    9月份将要读研,导师是做cv的,最近学习时找到了不少的计算机视觉的资料,记录一下,同时也分享给需要的朋友 assmdx/ComputerVisionDoc AceCoooool/interview-c ...

  8. 初始 Kafka Consumer 消费者

    温馨提示:整个 Kafka 专栏基于 kafka-2.2.1 版本. 1.KafkaConsumer 概述 根据 KafkaConsumer 类上的注释上来看 KafkaConsumer 具有如下特征 ...

  9. 【转】Hive Data Manipulation Language

    Hive Data Manipulation Language Hive Data Manipulation Language Loading files into tables Syntax Syn ...

  10. 使用java做一个能赚钱的微信群聊机器人(2020年基于PC端协议最新可用版)

    前言 微信群机器人,主要用来管理群聊,提供类似天气查询.点歌.机器人聊天等用途. 由于微信将web端的协议封杀后,很多基于http协议的群聊机器人都失效了,所以这里使用基于PC端协议的插件来实现. 声 ...