十六 企业级自定义表单引擎解决方案--Excel导入导出

Excel对于后端管理系统来说 , 永远都是绕不开的话题 , 开发Excel导入导出功能往往都比较麻烦 , 因为涉及到Excel导入模板制作、Excel表格数据与系统数据库表字段映射、Excel导入数据验证、验证错误数据返回给用户的交互、表格数据唯一判断(不存在新增 , 存在则修改) , 复杂一些的还会涉及到多表头、合并单元格情况 , 可能还会涉及到Excel关联多张数据表的情况 。对于关联多张表的情况 , 处理这种Excel映射出来的数据必须手动码代码处理 , 这个是没办法的 , 但是对于其他常规导入导出以及常规的Excel操作 , 完全可以进行结构化的封装处理 , 理想的情况下可以做到零代码实现 。我这里采用的是NOPI来实现的 。
这里是根据表单模板自动生成的Excel导入导出功能 , 可以开源网站地址查看 。

十六 企业级自定义表单引擎解决方案--Excel导入导出

文章插图
定义模板每个字段对应Excel里面的一列 , 可以定义字段名称、列名称、字段类型、是否必填、列表头备注信息、导入验证类型等关键信息 , 定义好信息之后 , 导入导出所有逻辑都是围绕着这个模板来进行的 , 把所有逻辑封装到一个组件中 , 那么代码只需要处理常规的集合对象即可 。
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; }}配置示例:
"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 , 包括导入统计信息 , 导入出错行的原始数据 , 出错的行号 , 出错行的具体出错信息 , 如:

经验总结扩展阅读