自学内容网 自学内容网

Spring Boot2.0之九 使用EasyExcel导出Excel

前言

SpringBoot项目实现Excel文件导出功能,可以使用alibaba开源项目EasyExcel实现。默认导出的Excel表头为宋体14加粗,表内容为宋体11。

一、引入EasyExcel依赖

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

二、代码实现

1.Controller层

/**
* @param user 查询条件
* @param column 前端选择的导出列,逗号分隔,如果前端不指定导出列,该参数省略
*/
@GetMapping("/exportExcel")
@ApiOperation("查询记录导出")
public void exportExcel(HttpServletResponse response, User user, String column) throws IOException {
userService.exportExcel(response, user,column);
}

2.Service层

public interface userService {
    /**
     * 导出excel
     */
    void exportExcel(HttpServletResponse response, User user, String column) throws IOException;
}

3.ServiceImpl层

@Override
public void exportExcel(HttpServletResponse response, User user, String column) throws IOException{
//查询导出数据
List<User> userList = userMapper.selectList(user);
//前端传入的需要导出的列,前端不指定导出列时,该步省略
Set<String> columns = new HashSet<String>(Arrays.asList(column.split(",")));
//设置ContentType
response.setContentType("application/vnd.ms-excel");
//设置字符集
    response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
    String fileName = URLEncoder.encode("用户列表", "UTF-8");
    response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
    //如果前端不指定导出列,.includeColumnFiledNames(columns)可省略
EasyExcel.write(response.getOutputStream(),User.class).includeColumnFiledNames(columns).sheet(fileName).doWrite(records);
}

4.Entity层

//@ExcelIgnoreUnannotated  可忽略类中的属性变量不加@ExcelProperty注解的不参与读写
//@ContentRowHeight(20)//表体行高,默认13.5,可不设置
//@HeadRowHeight(20)//表头行高,默认56.25,可不设置
//@HeadStyle(horizontalAlignment = HorizontalAlignment.CENTER)//表头居中,默认表头水平垂直居中,如果类或字段用了@ContentStyle注解,类上要加该注解,不然表头样式就没了
//@ContentStyle(horizontalAlignment = HorizontalAlignment.CENTER)//内容居中
@ColumnWidth(11)  列宽,值为wps打开excel查看的列宽,在类上用作用于所有字段,也可在字段上单独设置。
@Data
public class User {
    @ExcelIgnore  //忽略该字段
    private int id;
 
    @ExcelProperty("姓名")
    private String name;
 
    @ExcelProperty("编号")
    private String code;
 
    @ExcelProperty("年龄")
    private String age;
 
@ContentStyle(horizontalAlignment = HorizontalAlignment.CENTER) //默认水平左对齐,垂直居中对齐
    @ExcelProperty("性别")
    private String sex;
 
 @ColumnWidth(15)
    @ExcelProperty("地址")
    private String address;
 
    @ExcelProperty("出生时间")
    @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
    private Date birthday;
}

5.指定模版导出

@Override
public void exportExcel(HttpServletResponse response, User user, String column) throws IOException{
//查询导出数据
List<User> userList = userMapper.selectList(user);
//前端传入的需要导出的列,前端不指定导出列时,该步省略
Set<String> columns = new HashSet<String>(Arrays.asList(column.split(",")));
//设置ContentType
response.setContentType("application/vnd.ms-excel");
//设置字符集
    response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
    String fileName = URLEncoder.encode("用户列表", "UTF-8");
    response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
    //指定导出模版
    InputStream templateFile = new ClassPathResource("templates/excel/user.xlsx").getInputStream();
// 这里 会填充到第一个sheet, 然后文件流会自动关闭
    EasyExcel.write(fileName).withTemplate(templateFileName).sheet().doFill(data());
}

填充模版
在这里插入图片描述
在这里插入图片描述

三、导出结果展示

在这里插入图片描述

参考资料:EasyExcel官网:https://easyexcel.opensource.alibaba.com/


原文地址:https://blog.csdn.net/sinat_31986807/article/details/143564579

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!