SpringBoot集成EasyExcel(入门)

727 阅读2分钟
1.导入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.7</version>
</dependency>
2.修改实体类

给实体类加上注解。@ExcelProperty(index,value),index指定位置,value指定列名,@ExcelIgnore则是在操作时忽略该字段。

public class EduTeacher{
    //讲师ID
    @ExcelProperty(index = 0, value = "id")
    private String id;
    //讲师姓名
    @ExcelProperty(index = 1, value = "姓名")
    private String name;
    //讲师简介
    @ExcelProperty(index = 2, value = "讲师简介")
    @ExcelIgnore  // 忽略该字段
    private String intro;
    //讲师资历,一句话说明讲师
    @ExcelProperty(index = 3, value = "讲师资历")
    private String career;
    //头衔 1高级讲师 2首席讲师
    @ExcelProperty(index = 4, value = "头衔")
    private Integer level;
    //讲师头像
    @ExcelProperty(index = 5, value = "讲师头像")
    private String avatar;
    //排序
    @ExcelProperty(index = 6, value = "讲师头像")
    private Integer sort;
    //逻辑删除 1(true)已删除, 0(false)未删除
    @ExcelProperty(index = 7, value = "讲师头像")
    private Integer isDeleted;
    //创建时间
    @ExcelProperty(index = 8, value = "讲师头像")
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;
    //更新时间
    @ExcelProperty(index = 9, value = "讲师头像")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;
    }
3.编写导入方法
public void export(HttpServletRequest request,HttpServletResponse response){
    try {
        List<EduTeacher> list = eduTeacherService.list(new QueryWrapper<>());
        
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        response.setHeader("Content-disposition", "attachment;filename=" + "excelName" + ExcelTypeEnum.XLSX.getValue());
        EasyExcel.write(response.getOutputStream(), EduTeacher.class).sheet("导出测试123").doWrite(list);

    } catch (Exception e) {

    }
}
4.导入
4.1 配置一个导入监听类
public class eduExcelLinster extends AnalysisEventListener<EduTeacher> {

    public EduTeacherService eduTeacherService;
    private List<EduTeacher> list = new ArrayList<EduTeacher>();

    public eduExcelLinster(EduTeacherService eduTeacherService){
        this.eduTeacherService = eduTeacherService;
    }
    @Override
    public void invoke(EduTeacher eduTeacher, AnalysisContext analysisContext) {
        // 这里是一条一条数据执行的
        list.add(eduTeacher);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 最后在这里批量插入
        eduTeacherService.saveBatch(list);
    }
}
4.2 编写导入方法
@RequestMapping(value = "/importMemberList", method = RequestMethod.POST)
@ResponseBody
public void importMemberList(@RequestPart("file") MultipartFile file) {
    try {
        InputStream fileInputStream = file.getInputStream();
        EasyExcel.read(fileInputStream, EduTeacherExcel.class, new eduExcelLinster(eduTeacherService))
                .sheet().doRead();
    }catch (Exception e) {

    }
}
5.类型转换

下面这种数据库存的值是int,但需要导出String怎么办呢?

//头衔 1高级讲师 2首席讲师
    @ExcelProperty(index = 4, value = "头衔")
    private Integer level;
5.1 定义转换类
public class GenderConverter implements Converter<Integer> {
    //在java中性别是用 0 1 来标识的  所以是int
    @Override
    public Class supportJavaTypeKey() {return Integer.class;}
   // 在excel中是男女 所以是string
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}
   //将excel的数据类型转为java数据类型
    @Override
    public Integer convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String stringValue = cellData.getStringValue();
        if (stringValue == null) {
            throw new RuntimeException("暂无头衔");
        }
        if ("高级讲师".equals(stringValue)) {
           return 1;
        }
         return 2;
    }
   //将java的数据类型转为excel数据类型
    @Override
    public CellData convertToExcelData(Integer s, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        if (s == 1){
             return new CellData("高级讲师");
        }
        return new CellData("首席讲师");
    }
}
5.2 添加注解
//头衔 1高级讲师 2首席讲师
@ExcelProperty(index = 4, value = "头衔",converter = GenderConverter.class)
private Integer level;
6. 更多操作

框架篇-easyexcel使用
更多操作