您当前的位置: 首页 >  spring

wu@55555

暂无认证

  • 3浏览

    0关注

    201博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

springboot:生成excel并且通过邮件发送

wu@55555 发布时间:2022-10-06 11:25:27 ,浏览量:3

0. 引言

实际开发中,特别是在B端产品的开发中,我们经常会遇到导出excel的功能,更进阶一点的需要我们定期生成统计报表,然后通过邮箱发送给指定的人员。

这样的一个功能我们将其拆分出来包括三方面的知识点:定时任务框架、excel生成、邮件发送

今天要带大家来实现的就是excel生成并通过邮件发送

1. 开发环境

以下演示jdk选用1.8版本。springboot采用2.3.7.RELEASE版本。

excel生成通过alibaba的EasyExcel组件来实现,采用最新的稳定版本3.1.1

2. 思路

我们的核心实现分成两步: 1、生成一个excel 2、将excel作为附件添加到邮件中进行发送

于是基于此思路,我们结合EasyExcel提供的write方法来生成excel文件,该excel文件在邮件发送完成后需要删除;然后通过之前我们讲解过的邮件发送工具类来实现邮件发送

邮件发送工具类不再单独讲解,不清楚的同学可以查看之前几期的内容:

springboot:java实现邮件及附件发送、HTML正文的三种方式(一)

springboot:java实现邮件及附件发送、HTML正文的三种方式(二)

springboot:java实现邮件及附件发送、HTML正文的三种方式(三)

3. 实操

1、书写邮件发送工具类,其实现参考上述博文

2、引入excel依赖:


            com.alibaba
            easyexcel
            3.1.1

3、实现easyExcel的数据监听类

/**
 * @author benjamin_5
 * @Description 数据监听类
 * @date 2022/10/5
 */
@EqualsAndHashCode(callSuper = true)
public class DataListener extends AnalysisEventListener {

    /**
     * 缓存数据列表
     */
    private final List dataList = new ArrayList();

    @Override
    public void invoke(T data, AnalysisContext context) {
        dataList.add(data);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {

    }

    @Override
    public void invokeHead(Map headMap, AnalysisContext context) {
        this.invokeHeadMap(ConverterUtils.convertToStringMap(headMap,context),context);
    }

    public List getDataList() {
        return dataList;
    }

}

4、创建生成excel文件的工具类ExcelUtil

public class ExcelUtil {

    /**
     * 生成excel文件
     * @param fileName excel文件路径
     * @param dataList 数据列表
     * @param clazz 导出对象类
     * @param 
     * @return
     * @throws IOException
     */
    public static  File generateExcel(String fileName, List dataList, Class clazz) throws IOException {
        // 生成文件
        File excel = new File(fileName);
        // excel写入
        EasyExcel.write(excel,clazz).sheet(0).doWrite(dataList);
        return excel;
    }
}

5、创建导出数据的实体类

/**
 * @author benjamin_5
 * @Description
 * @date 2022/10/5
 */
@Data
public class CustomerData implements Serializable {

    @ExcelProperty(value = "客户名称")
    @ColumnWidth(value = 25)
    private String name;

    @ExcelProperty(value = "客户地址")
    @ColumnWidth(value = 50)
    private String address;

    @ExcelProperty(value = "联系电话")
    private String phone;

    @ExcelProperty(value = "金额")
    private BigDecimal amount;

    @ExcelProperty(value = "注册日期")
    @DateTimeFormat(value = "yyyy-MM-dd")
    private Date createDate;
}

6、实现excel数据生成及邮件发送的接口。为了演示方便我直接在controller中书写了,实际工作中应该把生成并发送的方法提取到工具类或者Service层中。

这里调用的是基于spring-boot-starter-mail实现的邮件发送工具类

@GetMapping("generateExcelAndSend")
    public void generateExcelAndSend(){
        List dataList = new ArrayList();
        // 构造假数据
        for (int i = 0; i             
关注
打赏
1664985904
查看更多评论
0.0629s