实际开发中,特别是在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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?