对于大批量的数据,经常需要从Excel中导入到系统中。
导入Excel的开发方式和做一个页面,页面里有若干格子给用户填写,点击保存按钮的过程大致相同。
导入复杂Excel用到的技巧和数据保存中一样,这里再集中介绍一下。
1.导入的字段
是非字段可以用 是/否,true/false, 以及符号 √ 和 ×。
字典项字段,系统自动会生成下拉选项框。导入Excel的时候,如果一个格子的控件是下拉选项框,会根据excel格子的内容,到下拉选项中找出对应的项,将数值保存到数据表的这个字段中。
引用字段,该类型的字段,系统自动会生成下拉数据集。如果一个格子的控件是下拉数据集,会根据Excel格子的内容,到下拉数据集中对应的数据表里,寻找这个显示值对应的键(id),然后把主键保存到数据表的这个字段中。
如果引用字段在Excel里是id或者代码,而不是显示值。导入Excel会报错无法找到这个名字的记录。这时候只需要将这个格子的控件类型从下拉数据集改为普通就可以了。
如果Excel里的引用字段不是显示值,可以在控件配置中进行配置。例如用户的名称不是唯一的,为了确保正确,可以改为按照登录名导入,只需要在控件配置里将显示列改为
`table.用户.登录名`
或者添加额外筛选条件。例如用户的名称不唯一,但导入excel里增加部门和班组就可以唯一确定了。
需要注意,导入Excel的时候,尽量使用左边和上边格子的值。
2.一个格子计算相关字段
例如 计划表的开始日期,结束日期是相同的,Excel只有一个格子来表示。
同时记录的名称是用一个基本名称和日期组合得到的。这就是三个字段依赖同一个格子。
- 配置隐藏值
在这个格子 G1 的隐藏值里配置根据格子的值来计算的其他两个字段的值。
在格子G1的高级属性->隐藏值里配置表达式:
{"date":value(),"dateName":Date.parseDate(value()).toString("M月d日")+B1}
隐藏值是一个键值对对象。
date是给第一个隐藏值起的名字,值是value(),也就是和当前格子的值相同,用于结束日期
dateName是给第二个隐藏值起的名字,值Date.parseDate(value()).toString("M月d日")+B1 表示值是这个格子代表的日期的几月几日加上前面B2格子的值,例如Excel中,B1格子的值是"开发部计划",G1格是2020-03-04 那么G1格的隐藏值dateName就是:"3月4日开发部计划"。
- 配置隐藏值的保存至属性
在G1格的保存至中撰写表达式:
jihua.开始日期 | save.hide(jihua.结束日期,"date") | save.hide(jihua.名称,"dateName")
用| 分开的多个保存至表达式里。
jihua.开始日期
表示把单元格的值保存到jihua 数据的字段 开始日期 中。如上示例中就是 2020-03-04save.hide(jihua.结束日期,"date")
表示把单元格的隐藏值date的值,保存到jihua 数据的字段 结束日期 中。如上示例中就是 2020-03-04save.hide(jihua.名称,"dateName")
表示把单元格的隐藏值dateName的值,保存到jihua 数据的字段 结束日期 中。如上示例中就是"3月4日开发部计划"。
3.横向扩展和纵向扩展
导入Excel中,暂时支持在第一排中写横向扩展,以及第二行中写纵向扩展。
-
横向扩展的主表加纵向扩展的子表。
主表是计划表,每天一个计划。子表是计划人员表,列着该日的计划包含哪些人员。
- 导入纵向多重扩展
导入的Excel先是部门的select,然后是部门下的用户的select。一次性导入多个部门,以及这些部门下的用户。
导入纵向多重扩展除了两重扩展外,可以支持n重扩展。
- 导入交叉扩展
每个学生对应每门课程的考试成绩。