Excel表格
下面是Excel表格,成果简介前可以作为主表数据存储(存在合并),成果简介后的数据作为从表数据存储。
实现思路
-
通过EasyExcel读取Excel数据,用List<AwardsDetailField> list接收
因为POI/EasyExcel对合并单元格的数据只读取一次,需要把为空的单元格也赋值,这是核心技术难点。 -
循环使用hibernate-validator对数据进行校验
存在校验不通过的数据返回给前端,所有数据校验通过才写入数据库 -
封装然后写入数据库
- 用Java8 对List< DetailFeiled> list根据多字段进行分组,得到Map<String,List
> map - 循环map,封装主表和详细表插入list
- 批量插入
- 用Java8 对List< DetailFeiled> list根据多字段进行分组,得到Map<String,List
-
导入时要求同一年数据可以分多次导入,但同一年内,成果名称不允许重复
这个可以在数据库中根据获奖类型+获奖年份+成果名称建立联合约束1
ALTER TABLE t_awards ADD CONSTRAINT award_type_year_product UNIQUE (award_type,award_year,award_product);
相关代码
下面贴出的是通过EasyExcel读取Excel数据的测试代码
pom依赖:
1 | <dependencies> |
Excel行号类:
1 |
|
AwardsDetailField类(需继承RowIndex):
1 | package com.importexcel; |
ImportExcelHelper类(导入Excel入口、对合并单元格处理):
1 | package com.importexcel; |
Excel模板的读取监听类:
1 | package com.importexcel; |
测试类:
1 | package com.importexcel; |