开源项目地址:https://gitee.com/easyxaf/excel-importer
前言
思路
Excel导入本质是数据的映射,就是将Excel的行映射到XAF的BO对象中,这中间要涉及到数据类型的转换,如数值、日期、布尔、枚举、引用等类型,同时还要有数据的校验,由于Excel输入的灵活性及随意性,可以提高输入的方便性,但输入的准确性会大打折扣,所以数据的校验很重要。
结合XAF的特点,再加上Excel的灵活性,本Excel导入模块,优先考虑了采用XAF的Model进行Excel导入模板的创建,由于Model可以在设计时及运行时创建,这样可以解决Excel导入模板的灵活性,再通过XAF的条件表达式(Criteria)来实现数据的验证及数据的转换,基本可以解决大部分Excel导入的需求。
使用
本模块支持XPO及EFCore,由于Blazor项目需要一个存储临时文件的实体,而XPO与EFCore的实体类是不一样的,模块中并没包含这个实体(ExcelImporterTempFile),而是将其放到了示例模块项目中,如下图
示例
下面通过一个简单的示例来讲解Excel导入模块的功能
简易Excel模板制作
导出的Excel模板
编辑后的Excel模板
导入Excel数据
- 模板制作
- 导出模板
- 编辑数据
- 导入Excel
模板的有效性验证
Excel录入数据
设置
Excel模板中的下拉选择
在User中有一个IsActive属性,它的类型为布尔型,在本模块中布尔型默认会使用下拉选择,如果IsActive属性定义了CaptionForFalse及CaptionForTrue,则采用定义的文本,否则会采用'否'与'是',但同时我们也可以设置PredefinedValues属性,如非活动与活动
Excel模板的标头格式
Excel模板的标头文本
Excel模板中的列隐藏
只是进行了隐藏,用户可以轻松的显示出来,无法通过它隐藏数据
Excel模板中引用类型的下拉选择
忽略验证错误
必须包含的Excel工作表列
导入时的默认值表达式
列不显示在模板中
不更新模板中的列
列的值表达式
导出视图数据
主键的导入
导入数据方式
同步(Synchronize),它不仅创建不存在的数据,同时还会更新已存在的数据(默认行为)
- 仅创建(OnlyCreation),它只创建不存在的数据,已存在的数据不会更新
- 仅更新(OnlyUpdate),不存在的数据不会创建,更新已存在的数据
- 全创建(AllCreation),不管是否存在都会创建
验证失败展示
自定义数据验证
数据类型的验证
- 模板中定义的最大值,最小值
- BO中定义的规则
- 模板中自定义的规则
最后
https://www.cnblogs.com/haoxj/p/17419045.html