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

QQ群:

编程交流群<85318032> 

产品交流群<897857351>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python百分号用法_python百分号%—%s、%d、%f

百分号%表示占位符&#xff0c;在后续通过%传入真实的值 %s 拼接字符串&#xff0c;实际可以接受任何类型的值 %d 只能拼接整数数字 %.nf 四舍五入拼接浮点数&#xff0c;n表示保留到小数点后n位&#xff0c;不加.n默认保留6位小数 %% 在有%拼接的的字符串里&#xff0c;如果要…

《ASP.NET Core 微服务实战》-- 读书笔记(第11章)

第 11 章 开发实时应用和服务在本章&#xff0c;我们将讨论“实时”的准确含义&#xff0c;以及在大部分消费者看来应该属于这一范畴的应用类型接着&#xff0c;我们将探讨 WebSocket&#xff0c;并分析为什么传统的 WebSocket 与云环境完全不相适应&#xff0c;最后我们将构建…

word List 14

word List 14 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

python编程模式是什么_python 开发的三种运行模式详细介绍

Python 三种运行模式 Python作为一门脚本语言&#xff0c;使用的范围很广。有的同学用来算法开发&#xff0c;有的用来验证逻辑&#xff0c;还有的作为胶水语言&#xff0c;用它来粘合整个系统的流程。不管怎么说&#xff0c;怎么使用python既取决于你自己的业务场景&#xff0…

递归实现排列型枚举

把 1∼n 这 n 个整数排成一行后随机打乱顺序&#xff0c;输出所有可能的次序。 输入格式 一个整数 n。 输出格式 按照从小到大的顺序输出所有方案&#xff0c;每行 1 个。 首先&#xff0c;同一行相邻两个数用一个空格隔开。 其次&#xff0c;对于两个不同的行&#xff0c;…

【在路上5】实时计算助力派件管控

签收率系统试运营以来&#xff0c;每天算出高额罚款&#xff0c;虽然没有真正执行&#xff0c;但也挺吓人的。并且&#xff0c;完完全全的把全网人员积极性提升起来了。总部网络管理中心每天给出各省区前一天的签收率报表&#xff0c;来了个排名和点名&#xff1b;各省区管理中…

数据结构---B-(B)、B+的总结

数据结构—B-&#xff08;B&#xff09;、B的总结 原理&#xff1a;参考趣学数据结构 m阶B-树规则(有序的&#xff08;左子树的元素值<根节点的元素值<右子树的元素值&#xff09;、平衡的&#xff08;每个结点的左右子树的高度差<1&#xff09;、多路的&#xff08…

dfs巩固训练

按顺序从上往下刷即可&#xff01;&#xff01;&#xff01; 知识点: 关于环形的数组&#xff0c;前移动和后移动可能会溢出下标。解决方法是&#xff0c;转移后的坐标公式为 &#xff08;原坐标改变量数组长度&#xff09;%数组长度 易错点: 写搜索时候&#xff0c;有时候会…

python适用范围_Python应用范围总结概览

Python就是万金油&#xff01; Python&#xff08;派森&#xff09;&#xff0c;它是一个简单的、解释型的、交互式的、可移植的、面向对象的超高级语言。这就是对Python语言的最简单的描述。 Python有一个交互式的开发环境&#xff0c;因为Python是解释运行&#xff0c;这大大…

重磅!K8S 1.18版本将内置支持SideCar容器。

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

广义表的学习(原理和代码)

广义表的学习&#xff08;原理和代码&#xff09; 参考链接&#xff1a; https://blog.csdn.net/it_is_me_a/article/details/99870530

bfs巩固训练

按顺序从上往下刷即可&#xff01;&#xff01;&#xff01; 知识点: 关于环形的数组&#xff0c;前移动和后移动可能会溢出下标。解决方法是&#xff0c;转移后的坐标公式为 &#xff08;原坐标改变量数组长度&#xff09;%数组长度 易错点: 写搜索时候&#xff0c;有时候会…

python输出文本 去掉引号_Python可以在文本文件中读取时从字符串中删除双引号吗?...

我有一些这样的文本文件&#xff0c;有50​​00行&#xff1a; 5.6 4.5 6.8 "6.5" (new line) 5.4 8.3 1.2 "9.3" (new line) 所以最后一个术语是双引号之间的数字。 我想做的是使用Python(如果可能的话)将四列分配给双变量。但主要的问题是最后一个术语&a…

word List 15

word List 15 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

.NET Core 如何验证信用卡卡号

_点击上方蓝字关注“汪宇杰博客”导语最近在家闲的蛋疼需要写点文章。正好我本人在金融科技公司工作&#xff0c;对信用卡业务略有了解。我们看看如何在 .NET Core 里验证一个信用卡的卡号是否合法。信用卡卡号组成首先&#xff0c;信用卡的卡号一般为16位&#xff0c;也有少许…

python统计文件中每个单词出现的次数_python统计文本中每个单词出现的次数

.python统计文本中每个单词出现的次数&#xff1a; #codingutf-8 __author__ ‘zcg‘ import collections import os with open(‘abc.txt‘) as file1:#打开文本文件 str1file1.read().split(‘ ‘)#将文章按照空格划分开 print "原文本:\n %s"% str1 print "…

AcWing 1101. 献给阿尔吉侬的花束

阿尔吉侬是一只聪明又慵懒的小白鼠&#xff0c;它最擅长的就是走各种各样的迷宫。 今天它要挑战一个非常大的迷宫&#xff0c;研究员们为了鼓励阿尔吉侬尽快到达终点&#xff0c;就在终点放了一块阿尔吉侬最喜欢的奶酪。 现在研究员们想知道&#xff0c;如果阿尔吉侬足够聪明…

数据结构---关键路径

数据结构—关键路径 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include "stack.h" #define typeNode int //每个头结点的标识数据类型 #define N 100 //最大结点数 int degree[N];//结点入度数,通过…

Kubernetes AIOps解决方案商 Carbon Relay获6300万美元A轮融资

每10家企业中就有4家报告说他们正在使用Kubernetes&#xff0c;Kubernetes是开放源代码容器编排框架&#xff0c;用于在生产环境中自动化应用程序的部署&#xff0c;扩展和管理。但是&#xff0c;诸如管理复杂性&#xff0c;部署时间和无法预料的错误之类的挑战可能会降低生产率…

python结束线程_2018-01-02 如何优雅地终止python线程

前言 零 我们知道&#xff0c;在python里面要终止一个线程&#xff0c;常规的做法就是设置/检查 --->标志或者锁方式来实现的。 这种方式好不好呢&#xff1f; 应该是不大好的&#xff01;因为在所有的程序语言里面&#xff0c;突然地终止一个线程&#xff0c;这无论如何都…