使用 com.alibaba.easyexcel 读取上传的Excel文件:

1、添加maven依赖

        <!-- Excel转换 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.2.1</version>
        </dependency>

 2、读取上传的excel文件

    /**
     * 将excel转成列表
     *
     * @param file 文件
     * @param head Class
     * @param <T>  泛型对象
     * @return 对象列表
     * @throws IOException 读取失败的情况
     */
    public static <T> List<T> read(MultipartFile file, Class<T> head) throws IOException {
        return EasyExcel.read(file.getInputStream(), head, null)
                .autoCloseStream(false)
                .doReadAllSync();
    }

 3、写出excel文件

    /**
     * 将列表以 Excel 响应给前端
     *
     * @param response  响应
     * @param filename  文件名
     * @param sheetName Excel sheet 名
     * @param head      Excel head 头
     * @param data      数据列表哦
     * @param <T>       泛型,保证 head 和 data 类型的一致性
     * @throws IOException 写入失败的情况
     */
    public static <T> void write(HttpServletResponse response, String filename, String sheetName,
                                 Class<T> head, List<T> data) throws IOException {

        EasyExcel.write(response.getOutputStream(), head)
                .autoCloseStream(false)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .sheet(sheetName).doWrite(data);

        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");

    }

4、使用模板

    /**
     * 将数据按照模板填充,并以 Excel 响应给前端
     *
     * @param response  响应
     * @param fileName  文件名
     * @param sheetName Excel sheet 名
     * @param templateFileName 模板
     * @param data       数据
     * @throws IOException 写入失败的情况
     */

    public static <T> void writeForTemplate(HttpServletResponse response, String fileName, String sheetName, String templateFileName, Map<String,Object> data) throws IOException {

        EasyExcel.write(response.getOutputStream())
                .withTemplate(templateFileName)
                .sheet(sheetName).doFill(data);

        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
    }