应用easyexcel 导入excel表格

1. 增加依赖pom.xml

<dependency>    <groupId>com.alibaba</groupId>    <artifactId>easyexcel</artifactId>    <version>2.2.7</version></dependency>

2. 创立接管的实体类

import lombok.Data;@Datapublic class StaffExcelRequest {    /**     * * 员工姓名     */    private String name;    /**     * * 工号     */    private String jobNumber;    /**     * * 职位名称     */    private String jobTitle;    /**     * * 手机号     */    private String mobile;}

3. 创立监听事件

public class ExcelListener extends AnalysisEventListener<StaffExcelRequest> {    private static final Logger LOGGER = LoggerFactory.getLogger(ExcelListener.class);    /**     * 存储验证通过的数据     */    @Getter    private List<StaffExcelRequest> list = new ArrayList<>();    /**     * 假如这个是一个DAO,当然有业务逻辑这个也能够是一个service。当然如果不必存储这个对象没用。     */    private StaffService staffService;    /**     * 返回谬误     */    @Setter    @Getter    private List<Map<String,String>> maps = new ArrayList<Map<String,String>>();    private Map<String,String> map = new HashMap<>();    /**     * 头部占用的行数     */    @Setter    public Integer headerInteger = 1;    public ExcelListener() {        // 这里是demo,所以轻易new一个。理论应用如果到了spring,请应用上面的有参构造函数    }    /**     * 如果应用了spring,请应用这个构造方法。每次创立Listener的时候须要把spring治理的类传进来     *     * @param staffService     */    public ExcelListener(StaffService staffService) {        this.staffService = staffService;    }    /**     * 这个每一条数据解析都会来调用     *     * @param data     *            one row value. Is is same as {@link AnalysisContext#readRowHolder()}     * @param context     */    @Override    public void invoke(StaffExcelRequest data, AnalysisContext context) {        // 开始计数,以后是多少行        headerInteger++;        if (data.getName() == null || data.getName().equals("")) {            map.put("code","400");            map.put("msg","第["+headerInteger+"]行,员工姓名不能为空");            maps.add(map);            return;        }        if (data.getJobNumber() == null || data.getJobNumber().equals("")) {            map.put("code","400");            map.put("msg","第["+headerInteger+"]行,员工工号不能为空");            maps.add(map);            return;        }        LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data));        list.add(data);    }    /**     * 所有数据解析实现了 都会来调用     *     * @param context     */    @Override    public void doAfterAllAnalysed(AnalysisContext context) {        // 这里也要保留数据,确保最初遗留的数据也存储到数据库        saveData();        LOGGER.info("所有数据解析实现!");    }    /**     * 加上存储数据库     */    private void saveData() {        LOGGER.info("{}条数据,开始存储数据库!", list.size());        List<Staff> staffCollection = new ArrayList<>();        for (StaffExcelRequest request : list) {            // 创立实体类,用于保留数据            Staff entity = new Staff();            staff.setName(request.getName());            staffCollection.add(entity);        }        boolean b = staffService.saveBatch(staffCollection);        LOGGER.info("存储数据库胜利!"+b);    }}

4. 创立controller

@PostMapping("/import")// @RequiresPermissions("staff:import")public BaseResultData importExcel(@RequestParam("file") MultipartFile file) throws IOException {    // 解决上传文件    if (file.isEmpty()) {        return BaseResultData.ERROR(1,"上传失败,请抉择文件");    }    // 流导入    InputStream inputStream = file.getInputStream();    // 监听器    ExcelListener listener = new ExcelListener(staffService);    // 读取excel    EasyExcel.read(inputStream, StaffExcelRequest.class,listener).sheet().doRead();    // 查看是否有异样    List<Map<String, String>> maps = listener.getMaps();    String temp = "";    if (maps.size() > 0) {        for (Map<String, String> map : maps) {            temp += map.get("msg")+"\n";        }    }    // 返回信息    HashMap<String, String> hashMap = new HashMap<>();    hashMap.put("success",listener.getList().size()+"");    hashMap.put("error",temp);    return BaseResultData.SUCCESS(hashMap);}