企业级自定义表单引擎解决方案(十六)--Excel导入导出
Excel对于后端管理系统来说,永远都是绕不开的话题,开发Excel导入导出功能往往都比较麻烦,因为涉及到Excel导入模板制作、Excel表格数据与系统数据库表字段映射、Excel导入数据验证、验证错误数据返回给用户的交互、表格数据唯一判断(不存在新增,存在则修改),复杂一些的还会涉及到多表头、合并单元格情况,可能还会涉及到Excel关联多张数据表的情况。
对于关联多张表的情况,处理这种Excel映射出来的数据必须手动码代码处理,这个是没办法的,但是对于其他常规导入导出以及常规的Excel操作,完全可以进行结构化的封装处理,理想的情况下可以做到零代码实现。
我这里采用的是NOPI来实现的。
这里是根据表单模板自动生成的Excel导入导出功能,可以开源网站地址查看。
定义模板
每个字段对应Excel里面的一列,可以定义字段名称、列名称、字段类型、是否必填、列表头备注信息、导入验证类型等关键信息,定义好信息之后,导入导出所有逻辑都是围绕着这个模板来进行的,把所有逻辑封装到一个组件中,那么代码只需要处理常规的集合对象即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | public class ExcelTemplate { /// <summary> /// 字段名称 /// </summary> public string Field { get ; set ; } /// <summary> /// 列称 /// </summary> public string Name { get ; set ; } /// <summary> /// 字段类型 /// </summary> public EFieldType FieldType { get ; set ; } /// <summary> /// 列宽(显示多少个字符) /// </summary> public int CellLength { get ; set ; } /// <summary> /// 导出模版备注 /// </summary> public string ExportComments { get ; set ; } /// <summary> /// 导入 是否必填 /// </summary> public bool IsRequred { get ; set ; } /// <summary> /// 导入 验证类型 /// </summary> public EValidateType ValidateType { get ; set ; } /// <summary> /// 导入 验证类型为String时,验证长度,为Regular,为正则表达式 /// </summary> public string ValidateValue { get ; set ; } /// <summary> /// All = 1,OnlyForExport = 2(只在导入导出Excel使用),OnlyForImport = 3(只在导入导入Excel使用) /// </summary> public ETemplateForUse? TemplateForUse { get ; set ; } } |
配置示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | "excelTemplate" : [ { "name" : "字符" , "field" : "stringField" , "fieldType" : 5, "isRequred" : true , "validateType" : 0 }, { "name" : "日期字段" , "field" : "dateTimeField" , "fieldType" : 7, "validateType" : 10 }, { "name" : "字典字段" , "field" : "dictField" , "fieldType" : 5, "validateType" : 11 }, { "name" : "数字" , "field" : "intField" , "fieldType" : 1, "validateType" : 1 }, { "name" : "长字符" , "field" : "textField" , "fieldType" : 5, "validateType" : 0 }, { "name" : "编号" , "field" : "autoNoField" , "fieldType" : 5, "templateForUse" : 2, "validateType" : 0 }, { "name" : "浮点字段" , "field" : "decimalField" , "fieldType" : 2, "validateType" : 3 }, { "name" : "日期字段2" , "field" : "dateField" , "fieldType" : 6, "validateType" : 9 } ] |
导入常规验证
在模板中可以定义字段的约束信息,比如字段类型、长度、验证表达式等,在导入的时候,组件自动验证对应字段是否满足约束。
导入自定义验证
对于一些业务,常规验证不能满足情况时,组件可以允许用户传入验证委托函数,自定义验证逻辑。
导入错误生成错误Excel
导入Excel出错时,组件输出一个错误Excel,包括导入统计信息,导入出错行的原始数据,出错的行号,出错行的具体出错信息,如:
自动生成导入模板
可根据Excel模板配置信息,生成导入数据所需的模板,不需要每一个业务单独事先生成导入需要的静态Excel模板信息。
自定义表单处理
自定义表单肯定是要做到零代码的,那么这个就比较简单了,在模板生成表单配置时,根据对象信息(对象信息里面有字段名称、显示名称、字段类型等信息),读取特定的字段构造Excel模板即可。
Excel组件的封装已经在源码中,代码就不贴了,可以根据需要应用到自己的系统中,也可以根据需求进行修改、比如导入某行出错其他数据是导入还是不处理等。
wike文档地址:https://gitee.com/kuangqifu/sprite/wikis/pages
后端开源地址:https://gitee.com/kuangqifu/sprite
前端开源地址:https://gitee.com/kuangqifu/spritefronts
体验地址:http://47.108.141.193:8031 (首次加载可能有点慢,用的阿里云最差的服务器)
自定义表单文章地址:https://www.cnblogs.com/spritekuang/
流程引擎文章地址:https://www.cnblogs.com/spritekuang/category/834975.html (采用WWF开发,已过时,已改用Elsa实现,https://www.cnblogs.com/spritekuang/p/14970992.html )
posted on 2022-11-02 15:51 spritekuang 阅读(951) 评论(2) 编辑 收藏 举报
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体