导出文本+图片(批量)

说明:该方法使用EasyPOI实现

一. 添加Maven依赖

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.1.0</version>
</dependency>

二. 创建工具类 ExcelUtils

// list 数据集, title 表内标题, sheetName 工作簿名称, fileName 文件名称, clazz 数据集泛型
public static void easyPoi(HttpServletResponse response, List list, String title,
                   String sheetName, String fileName, Class clazz) throws IOException {
    // 1. 验证参数
    // 1.1 验证表内标题
    if (StringUtils.isEmpty(title)){
        title = "默认标题";
    }

    // 1.2 验证工作簿名称
    if (StringUtils.isEmpty(sheetName)){
        sheetName = "sheet1";
    }

    // 1.3 验证文件名称
    if (StringUtils.isEmpty(fileName)){
        fileName = "数据文档";
    }

    // 2. 设置title和sheetName
    ExportParams params = new ExportParams(title, sheetName);

    // 3. 设置导出参数
    Workbook workbook = ExcelExportUtil.exportExcel(params, clazz, list);

    // 4. 设置响应属性
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment;filename=" + 
                                URLEncoder.encode(fileName + ".xls", "utf-8"));

    // 5. 写入excel文件
    OutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);

    // 6. 关闭输出流
    outputStream.close();
}

三. 创建 ExcelMouldEntity

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ExcelMouldEntity implements Serializable {
    /**
     * id
     */
    @Excel(name = "序号", type = 10)
    private Integer id;

    /**
     * 姓名
     */
    @Excel(name = "姓名", type = 1)
    private String userName;

    /**
     * 年龄
     */
    @Excel(name = "年龄", type = 10)
    private int age;

    /**
     * 性别
     */
    @Excel(name = "性别", type = 1)
    private String sex;

    /**
     * 头像
     */
    @Excel(name = "头像", type = 2, imageType = 1)
    private String headUrl;
}
@Excel 参数说明:
属性 类型 默认值 功能
name String null 列名,支持name_id
type int 1 导出类型 1 是文本, 2 是图片,3 是函数,10 是数字 默认是文本
width double 10 列宽
height double 10 列高
format String “” 时间格式,相当于同时设置了exportFormat 和 importFormat
imageType int 1 图片读取类型,1表示从 file和线上url 读取,2表示从数据库读取

四. 测试接口

@RequestMapping("exportExcelMould")
public void exportExcelMould(HttpServletResponse response) throws IOException {
    /* 导出excel数据集 */
    List<ExcelMouldEntity> excelMouldList = new ArrayList<>();
    excelMouldList.add(new ExcelMouldEntity(1, "小明", 11,"男","https://**/1.jpg"));
    excelMouldList.add(new ExcelMouldEntity(2, "小红", 11, "女","https://**/2.jpg"));
    excelMouldList.add(new ExcelMouldEntity(3, "小兰", 11, "女","https://**/3.jpg"));
    //调用工具类
    ExcelUtils.easyPoi(response, excelMouldList,
                           "四年一班","学生数据","学生数据文档", ExcelMouldEntity.class);
}

五. 参考地址

https://www.cnblogs.com/niceyoo/p/13788623.html