基于springBoot和mybatisplus框架使用Easypoi完成Excel表的导入
首先导入依赖
--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
<!--easypoi-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
EasyPOI是通过注解来表明需要导入导出的类、字段,一个实体类代表的是表格里的一行,实体类里面的字段代表着一行里面的一列。现在注解一共有5个,分别是:
-
•
@Excel 作用到类字段上面,是对Excel一列的一个描述
-
•
@ExcelCollection 表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示
-
•
@ExcelEntity 表示一个继续深入导出的实体,但他没有太多的实际意义,只是告诉系统这个对象里面同样有导出的字段
-
•
@ExcelIgnore 和名字一样表示这个字段被忽略跳过这个导导出
-
•
@ExcelTarget 这个是作用于最外层的对象,描述这个对象的id,以便支持一个对象可以针对不同导出做出不同处理
实际使用代码
Controller层代码
--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
@PostMapping("/uploadjiuyuan1")
public R uploadFile(MultipartFile file) throws Exception {
ImportParams importParams = new ImportParams();
//设置表头所占行数、标题行所占行数,标题xxx表
importParams.setHeadRows(1);
importParams.setTitleRows(0);
@Cleanup
InputStream inputStream = file.getInputStream();
List<Jiuyuan1> list = ExcelImportUtil.importExcel(inputStream, Jiuyuan1.class, importParams);
LambdaQueryWrapper<Jiuyuan1> query = Wrappers.lambdaQuery();
boolean remove = jiuyuan1Service.remove(query);
boolean saveBatch = jiuyuan1Service.saveBatch(list);
return R.ok(saveBatch);
}
@cleanup加注解(在windows系统中不加这个注解会报错:关闭流)
常见问题解决
导入时的Excel表格字段与实体类中的字段顺序,注解必须一致,否则导入空值
注意导入标题和表头所占行数,