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包
| 名称 | 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 ExportTestDataWithSplitSheetExcel模板导出优化
优化导出性能
修复数据项为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发布的更多相关文章
- Magicodes.IE 2.2发布
Magicodes.IE 导入导出通用库,支持Dto导入导出以及动态导出,支持Excel.Word.Pdf.Csv和Html.已加入NCC开源组织. Magicodes.IE 2.0发布 Magico ...
- Visual Studio Code 1.0发布,支持中文在内9种语言
Visual Studio Code 1.0发布,支持中文在内的9种语言:Simplified Chinese, Traditional Chinese, French, German, Italia ...
- Apache Flume 1.7.0 发布,日志服务器
Apache Flume 1.7.0 发布了,Flume 是一个分布式.可靠和高可用的服务,用于收集.聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型.这是一个可靠.容错的服务. 本次更 ...
- Percona Server 5.6.33-79.0 发布
Percona Server 5.6.33-79.0 发布了,该版本基于 MySQL 5.6.33,包含了所有的 bug 修复,是Percona Server 5.6 系列中的正式版本.该版本主要是修 ...
- Rubinius 2.0 发布,Ruby 虚拟机
Rubinius 2.0 发布了,官方发行说明请看这里. Rubinius是一个运行Ruby程序的虚拟机,其带有Ruby的核心库. Rubinius的设计决定了其调试功能的强大,使得在运行时常规的Ru ...
- Restful.Data v2.0发布,谢谢你们的支持和鼓励
v1.0发布后,承蒙各位博友们的热心关注,也给我不少意见和建议,在此我真诚的感谢 @冰麟轻武 等朋友,你们的支持和鼓励,是这个开源项目最大的推动力. v2.0在除了细枝末节外,在功能上主要做了一下更新 ...
- 网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
网页动物园2.0发布,经过几个月的努力,采用JAVA编写! 网页动物园2.0 正式发布!游戏发布 游戏名称: 网页动物园插件 游戏来源: 原创插件 适用版本: Discuz! X1.5 - X3.5 ...
- Redisson-Parent 2.5.0 和 3.0.0 发布
Redisson-Parent 2.5.0 和 3.0.0 发布了,Redisson 是基于 Redis 服务之上构建的分布式.可伸缩的 Java 数据结构,高级的 Redis 客户端. Rediss ...
- Rsync 3.1.0 发布,文件同步工具
文件同步工具Rsync 3.1.0发布.2013-09-29 上一个版本还是2011-09-23的3.0.9 过了2年多.Rsync基本是Linux上文件同步的标准了,也可以和inotify配合做实时 ...
随机推荐
- Notepad++中安装json格式化插件
在线工具固然好,一旦没网就凉凉 Notepad++编辑器中提供了 json 数据格式化显示的插件 安装插件过程如下: 注意: 安装过程需要联网状态 插件安装过程会自动退出程序,等待几秒钟后插件安装完成 ...
- PPP协议 PAP认证
- Go 开发关键技术指南 | 敢问路在何方?(内含超全知识大图)
作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 Go 开发关键技术指南文章目录: 为什么你要选择 Go? Go 面向失败编程 带着服务器编程金刚经走进 2020 年 敢问路在何方? Go 开发指南大图 ...
- Theia APIs——通过JSON-RPC进行通信
上一篇:Theia APIs——事件 通过JSON-PRC进行通信 在本节中,我将讲解如何创建后端服务并通过JSON-PRC来连接它. 我将使用debug logging system作为例子来进行讲 ...
- 【Java基础总结】总结
总想着把学习的过程全都记录下来 以便某一时刻回头的时候,还能看见走过的路 对于基础来说,即使不回头看,也知道这条路是什么样子的 记录不记录,都无所谓 况且我不是专业的记录者,不记录比记录好 实在想不起 ...
- cannot insert multiple commands into a prepared statement问题原因及解决办法
问题是这样,我在对数据库进行写操作(添加.删除.修改)时,我想同时删除两个表中的两条关联数据,像这样 let sql = ` DELETE FROM bridge_parts WHERE id = $ ...
- .NET 在云原生时代的蜕变,让我在云时代脱颖而出
.NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开源和跨平台这两个关键优先事项,我们就可以放心了.云原生对应用运行时的不同需求,说明一个.NET Core 在云原生时 ...
- 【LC_Overview1_5】---学会总结回顾
刷LeetCode题目一周,主要采用C++和Python编程手段,截至目前做了5道简单的leetcode题目,做下阶段性的小结: 小结主要通过手撕代码,复习加回顾,尽量避免自己眼高手低的情况发生,对于 ...
- CDQ 入门
推荐博客 :https://blog.csdn.net/wu_tongtong/article/details/78785836 https://www.cnblogs.com/mlystdcall/ ...
- 3次方的期望dp
osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的 ...