Magicodes.IE
导入导出通用库,支持Dto导入导出以及动态导出,支持Excel、Word、Pdf、Csv和Html。已加入NCC开源组织。
Magicodes.IE 2.0发布
Magicodes.IE 2.1发布
如何做好一个开源项目(一)
- Github:https://github.com/dotnetcore/Magicodes.IE
- 码云(手动同步,不维护):https://gitee.com/magicodes/Magicodes.IE
- 特点、详细说明、教程、Nuget、注意事项、里程碑、FAQ、更新历史见下文
一旦成为贡献者,我们将会邀请您加入Magicodes.IE管理委员会的微信群,并拥有相关的投票权。
最新版本:2.2.0
2.2版本内容
2020.05.12
- 【Nuget】版本更新到2.2.0
- 【Excel模板导出】支持导出字节
- 【文档】Magicodes.IE Csv导入导出
- 【Excel导入导出】修复标注的添加问题
- 【导出】ASP.NET Core Web API 中使用自定义格式化程序导出Excel、Pdf、Csv等内容 #64
- 【导入导出】支持使用System.ComponentModel.DataAnnotations命名空间下的部分特性来控制导入导出 #63
2020.04.16
- 【Nuget】版本更新到2.2.0-beta9
- 【Excel模板导出】修复只存在一列时的导出 #73
- 【Excel导入】支持返回表头和索引 #76
- 【Excel导入导入】#63
- 支持使用System.ComponentModel.DataAnnotations命名空间下的部分特性来控制导入导出,比如
- DisplayAttribute
- DisplayFormatAttribute
- DescriptionAttribute
- 封装简单的易于使用的单一特性,例如
- IEIgnoreAttribute(可作用于属性、枚举成员,可影响导入和导出)
- 支持使用System.ComponentModel.DataAnnotations命名空间下的部分特性来控制导入导出,比如
2020.04.02
-
【Nuget】版本更新到2.2.0-beta8
-
【Excel模板导出】支持图片 #62,渲染语法如下所示:
{{Image::ImageUrl?Width=50&Height=120&Alt=404}} {{Image::ImageUrl?w=50&h=120&Alt=404}} {{Image::ImageUrl?Alt=404}}
2020.03.29
- 【Nuget】版本更新到2.2.0-beta7
- 【Excel模板导出】修复渲染问题 #51
2020.03.27
- 【Nuget】版本更新到2.2.0-beta6
- 【Excel导入导出】修复.NET Core 2.2的包引用问题 #68
2020.03.26
- 【Nuget】版本更新到2.2.0-beta4
- 【Excel多Sheet导出】修复#66,并添加单元测试
2020.03.25
- 【Nuget】版本更新到2.2.0-beta3
- 【Excel导入】修复日期问题 #68
- 【Excel导出】添加ExcelOutputType设置,支持输出无格式的导出。#54可以使用此方式。
2020.03.19
- 【Nuget】版本更新到2.2.0-beta2
- 【Excel导入】修复日期格式的导入Bug,支持DateTime和DateTimeOffset以及可为空类型,默认支持本地化时间格式(默认根据地区自动使用本地日期时间格式)
- 【Excel导入导出】添加单元测试ExportAndImportUseOneDto_Test,对使用同一个Dto导出并导入进行测试。Issue见 #53
2020.03.18
- 【Nuget】版本更新到2.2.0-beta1
- 【Excel导出】添加以下API:
////// 追加集合到当前导出程序 /// append the collection to context /// /// /// /// ExcelExporter Append (ICollection dataItems) where T : class; /// /// 导出所有的追加数据 /// export excel after append all collectioins /// /// /// Task ExportAppendData(string fileName); /// /// 导出所有的追加数据 /// export excel after append all collectioins /// /// /// Task<byte[]> ExportAppendDataAsByteArray();
- 【Excel导出】支持多个实体导出多个Sheet,感谢@ccccccmd 的贡献 #pr52 ,Issue见 #50。使用代码参考,具体见单元测试(ExportMutiCollection_Test):
var exporter = new ExcelExporter(); var list1 = GenFu.GenFu.ListOf<ExportTestDataWithAttrs>(); var list2 = GenFu.GenFu.ListOf<ExportTestDataWithSplitSheet>(30); var result = exporter.Append(list1).Append(list2).ExportAppendData(filePath);
疯狂的徽章
https://dev.azure.com/xinlaiopencode/Magicodes.IE/_build?definitionId=4&_a=summary
里程碑
# | 状态 | 完成时间 | 里程碑情况 |
---|---|---|---|
3.0 | 规划中 | 2020-12-31 | 待办 |
2.2 | ☕进行中#46 | 2020-04-31 | 待办 已完成 |
2.1 | 已完成 | 2020-03-15 | 已完成 |
Nuget
名称 | Nuget |
---|---|
Magicodes.IE.Core | |
Magicodes.IE.Excel | |
Magicodes.IE.Pdf | |
Magicodes.IE.Word | |
Magicodes.IE.Html | |
Magicodes.IE.Csv | |
Magicodes.IE.AspNetCore |
Magicodes Nuget包推荐
名称 | 说明 | Nuget | GitHUb |
---|---|---|---|
Magicodes.WeChat.MiniProgram | 小程序SDK | Magicodes.WxMiniProgram.Sdk | |
Magicodes.Sms.Aliyun | 阿里云短信 | xin-lai/Magicodes.Sms | |
Magicodes.Sms.Core | 短信核心库 | xin-lai/Magicodes.Sms | |
Magicodes.Sms.Aliyun.Abp | 阿里云短信Abp模块 | xin-lai/Magicodes.Sms | |
Magicodes.Storage.Core | 通用存储核心库 | xin-lai/Magicodes.Storage | |
Magicodes.Storage.AliyunOss.Core | 阿里云OSS存储 | xin-lai/Magicodes.Storage | |
Magicodes.Storage.Local.Core | 本地存储 | xin-lai/Magicodes.Storage | |
Magicodes.Storage.Tencent.Core | 腾讯云存储 | xin-lai/Magicodes.Storage | |
Magicodes.Storage.Abp.Core | 通用存储ABP模块集成 | xin-lai/Magicodes.Storage | |
Magicodes.WeChat.SDK.Core | 微信SDK | xin-lai/Magicodes.WeChat.SDK | |
Magicodes.SwaggerUI | SwaggerUI API快速配置和分组 | xin-lai/Magicodes.SwaggerUI | |
Magicodes.Pay.Alipay | 支付宝支付库 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Notify | 支付通用回调库 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Wxpay | 微信支付库 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Alipay.Global | 国际支付宝支付库 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Allinpay | 通联支付库 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Abp | ABP 支付通用封装库 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Abp.Allinpay | ABP 通联支付模块 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Abp.Wxpay | ABP 微信支付模块 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Alipay.Global | ABP 国际支付宝模块 | xin-lai/Magicodes.Pay | |
Magicodes.Pay.Alipay | ABP 支付宝模块 | xin-lai/Magicodes.Pay | |
Magicodes.Abp.Castle.NLog | ABP Nlog支持模块 | xin-lai/Abp.Castle.NLog | |
Magicodes.WxMiniProgram.Sdk | 微信小程序SDK | xin-lai/Magicodes.WxMiniProgram.Sdk | |
Magicodes.WxMiniProgram.Sdk.Abp | 微信小程序SDK Abp模块 | xin-lai/Magicodes.WxMiniProgram.Sdk | |
Magicodes.Dingtalk.SDK | 钉钉SDK | xin-lai/Magicodes.Dingtalk.SDK | |
Magicodes.DynamicSqlApi.Core | 根据SQL自动解析生成动态API | Magicodes.DynamicSqlApi | |
Magicodes.DynamicSqlApi.All | 根据SQL自动解析生成动态API | Magicodes.DynamicSqlApi | |
Magicodes.DynamicSqlApi.CsScript | 根据SQL自动解析生成动态API | Magicodes.DynamicSqlApi | |
Magicodes.DynamicSqlApi.Dapper | 根据SQL自动解析生成动态API | Magicodes.DynamicSqlApi | |
Magicodes.DynamicSqlApi.SqlServer | 根据SQL自动解析生成动态API | Magicodes.DynamicSqlApi |
注意
- Excel导入不支持“.xls”文件,即不支持Excel97-2003。
- 如需在Docker中使用,请参阅文档中的《Docker中使用》一节。
- 相关功能均已编写单元测试,在使用的过程中可以参考单元测试。
教程
-
基础教程之导入学生数据 (点此访问国内文档)
-
基础教程之导出Excel (点此访问国内文档)
-
基础教程之导出Pdf收据 (点此访问国内文档)
-
在Docker中使用
-
动态导出(待补充)
-
多Sheet导入(待补充)
-
Csv导入导出
-
Excel图片导入导出 (点此访问国内文档)
-
Excel模板导出之导出教材订购表(点此访问国内文档)
-
进阶篇之导入导出筛选器(待补充)
-
Excel导出多个实体(待补充)
其他教程见下文或单元测试
更新历史见下文。
特点
- 需配合相关导入导出的DTO模型使用,支持通过DTO以及相关特性控制导入导出。配置特性即可控制相关逻辑和显示结果,无需修改逻辑代码;
- 支持各种筛选器,以便支持多语言、动态控制列展示等场景,具体使用见单元测试:
- 导入列头筛选器(可动态指定导入列、导入的值映射关系)
- 导出列头筛选器(可动态控制导出列,支持动态导出(DataTable))
- 导入结果筛选器(可修改标注文件)
- 导出支持文本自定义过滤或处理;
- 导入支持中间空行自动跳过;
- 导入支持自动根据 DTO 生成导入模板,针对必填项将自动标注;
- 导入支持数据下拉选择,目前仅支持枚举类型;
- 导入数据支持前后空格以及中间空格处理,允许指定列进行设置;
- 导入支持模板自动检查,数据自动校验,异常统一处理,并提供统一的错误封装,包含异常、模板错误和行数据错误;
- 支持导入表头位置设置,默认为1;
- 支持导入列乱序,无需按顺序一一对应;
- 支持导入指定列索引,默认自动识别;
- 导出Excel支持拆分Sheet,仅需设置特性【ExporterAttribute】的【MaxRowNumberOnASheet】的值,为0则不拆分。具体见单元测试;
- 支持将导入Excel进行错误标注;
- 导入支持截止列设置,如未设置则默认遇到空格截止;
- 支持导出HTML、Word、Pdf,支持自定义导出模板;
- 导出Pdf,支持设置,具体见更新日志
- 导出收据
- 导入支持重复验证;
- 支持单个数据模板导出,常用于导出收据、凭据等业务
- 支持动态列导出(基于DataTable),并且超过100W将自动拆分Sheet。(感谢张善友老师(https://github.com/xin-lai/Magicodes.IE/pull/8 ))
- 支持值映射,支持通过“ValueMappingAttribute”特性设置值映射关系。用于生成导入模板的数据验证约束以及进行数据转换。
////// 性别 /// [ImporterHeader(Name = "性别")] [Required(ErrorMessage = "性别不能为空")] [ValueMapping(text: "男", 0)] [ValueMapping(text: "女", 1)] public Genders Gender { get; set; }
-
支持枚举和Bool类型的导入数据验证项的生成,以及相关数据转换
枚举默认情况下会自动获取枚举的描述、显示名、名称和值生成数据项
////// 学生状态 正常、流失、休学、勤工俭学、顶岗实习、毕业、参军 /// public enum StudentStatus { /// /// 正常 /// [Display(Name = "正常")] Normal = 0, /// /// 流失 /// [Description("流水")] PupilsAway = 1, /// /// 休学 /// [Display(Name = "休学")] Suspension = 2, /// /// 勤工俭学 /// [Display(Name = "勤工俭学")] WorkStudy = 3, /// /// 顶岗实习 /// [Display(Name = "顶岗实习")] PostPractice = 4, /// /// 毕业 /// [Display(Name = "毕业")] Graduation = 5, /// /// 参军 /// [Display(Name = "参军")] JoinTheArmy = 6, }
-
-
bool类型默认会生成“是”和“否”的数据项
-
如果已设置自定义值映射,则不会生成默认选项
-
- 支持excel多Sheet导入;
- 支持Excel模板导出,并且支持图片渲染
渲染语法如下所示:
{{Company}} //单元格渲染 {{Table>>BookInfos|RowNo}} //表格渲染开始语法 {{Remark|>>Table}}//表格渲染结束语法 {{Image::ImageUrl?Width=50&Height=120&Alt=404}} //图片渲染 {{Image::ImageUrl?w=50&h=120&Alt=404}} //图片渲染 {{Image::ImageUrl?Alt=404}} //图片渲染
后续将支持自定义管道。
- 支持Excel导入模板生成标注
-
支持Excel图片导入导出
- 图片导入
- 导入为Base64
- 导入到临时目录
- 导入到指定目录
- 图片导出
- 将文件路径导出为图片
- 将网络路径导出为图片
- 图片导入
-
支持多个实体导出多个Sheet
-
支持使用System.ComponentModel.DataAnnotations命名空间下的部分特性来控制导入导出#63
-
支持在ASP.NET Core Web API 中使用自定义格式化程序导出Excel、Pdf、Csv等内容#64
FAQ
问题列表
https://github.com/dotnetcore/Magicodes.IE/issues?q=label%3Aquestion
其他开源库
- https://github.com/xin-lai
- https://gitee.com/magicodes