最近项目上的需求,让我来开发报表的导出功能,查阅了许多的资料,在功能完成之后,写下这篇文章,希望可以帮助到大家。废话不多说,直接上代码(用的idea2018.3,jdk11)
1、 引入依赖
//采用了目前最新的依赖,因为旧版本许多方法都已经过期了
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
2、 相关实体类
//报表存储
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ReportPo implements Serializable {
/**
* 报表主键,自增
*/
private Long reportId;
/**
* 报表名称
*/
private String reportName;
/**
* 文件存储路径
*/
private String filePath;
/**
* http下载请求路径
*/
private String url;
/**
* 状态:-1导出失败,0导出中,1导出完成
*/
private Integer status;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 修改时间
*/
private LocalDateTime updateTime;
}
//查询条件
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ExportExcelRequest implements Serializable {
//动态选择的列
private SelectRequest selectRequest;
//开始时间
private LocalDate startTime;
//结束时间
private LocalDate endTime;
}
//动态选择的列
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SelectRequest implements Serializable {
//产品名称
private boolean prd;
//期初库存
private boolean beginningStocks;
//期初库存金额
private boolean beginningAmt;
//销售数量
private boolean salesQty;
}
//产品库存信息
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductStock implements Serializable {
//产品名称
private String prd;
//期初库存
private Integer beginningStocks;
//期初库存金额
private BigDecimal beginningAmt;
//销售数量
private Integer salesQty;
}
3、yml文件配置
#文件上传根路径
file-upload:
disk-root-path: /opt/st/
static-root-url: http://localhost:8072/st
注:导出的报表将会在idea安装盘下自动生成的文件夹下
4、 Controller层
@PostMapping("/export_excel")
public Response exportExcel(@RequestBody ExportExcelRequest request) {
return reportService.exportExcel(request);
}
说明:此处的Response类是将数据以json的格式返回到前端。
5、 Service层
@Service
@Slf4j
public class ReportService