前言
前面给大家介绍了动态表头的导入,这篇文章给大家介绍如何实现导出
前面给大家介绍了动态表头的导入,我们了解了如何通过EasyExcel灵活地读取结构不固定的Excel文件。这次,我们将目光转向数据导出------即如何将数据以Excel文件的形式输出给用户。这在很多应用场景中都非常有用,比如报表生成、数据备份和迁移等。下面我将详细讲解如何在Spring Boot应用中使用EasyExcel来实现数据的导出功能。
首先先上EasyExcel的官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网
1. 添加依赖
首先,我们需要确保项目中已经包含了EasyExcel的依赖。如果你还没有添加,请打开pom.xml
文件,并加入以下Maven依赖:
XML
<dependency>
<groupId>com.alibaba.easyexcel</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.3</version>
</dependency>
请根据你的项目需求选择合适的版本号,通常建议使用最新稳定版。
2.实现
controller层
在Controller层中,我们定义了一个处理导出请求的API端点。该方法接收一个HTTP POST请求,并根据传入的参数(DataFromVo
)调用服务层的方法来执行具体的导出逻辑。
java
/**
* 导出检查计划数据
* @author zqx
* @date 2023/12/6 17:48
*/
@RestController
@RequestMapping("/inspection")
public class InspectionPlanController {
@Autowired
private SiteInspectPlanHomeService siteInspectPlanHomeService;
/**
* 导出检查计划信息为Excel文件。
*
* @param request HTTP请求对象,用于获取请求信息。
* @param response HTTP响应对象,用于设置响应头和写出文件流。
* @param dataFromVo 包含查询条件的数据传输对象。
*/
@PostMapping("/exportInspectionPlan")
@ApiOperation(value = "导出检查计划信息", notes = "将检查计划信息导出为Excel文件")
public void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response, @RequestBody DataFromVo dataFromVo) {
log.info("执行了POST请求");
log.info("参数:{}", dataFromVo);
siteInspectPlanHomeService.exportInspectionPlan(request, response, dataFromVo);
}
}
创建实体类
为了使EasyExcel能够正确地映射Java对象到Excel表格中的列,我们需要创建一个与Excel结构相匹配的实体类。这里我们使用ExportPlanInformationVo
作为示例。
java
/**
* 导出信息对象
* @Author zqx
* @Date 2023/12/6 9:26
*/
@Data
@HeadRowHeight(30) // 设置头部行高
@ContentRowHeight(25) // 设置内容行高
@ColumnWidth(20) // 设置列宽
@HeadFontStyle(fontName = "宋体", fontHeightInPoints = 11)
public class ExportPlanInformationVo implements Serializable {
@ApiModelProperty("名称")
@ExcelProperty("名称")
private String planName;
@ApiModelProperty("类型")
@Dict(code = "inspectionType", fieldName = "inspectionTypeName")
@ExcelProperty("类型")
private String inspectionType;
@ApiModelProperty("主题名称")
@ExcelProperty("主题")
private String themeName;
@ApiModelProperty("计划起止时间")
@ExcelProperty("计划起止时间")
private String startEndTime;
@ApiModelProperty("年度")
@ExcelProperty("年度")
private String inspectionYear;
@ApiModelProperty("单位数量")
@ExcelProperty("单位数量")
private String orgNoCount;
@ApiModelProperty("户数")
@ExcelProperty("户数")
private String taskNum;
@ApiModelProperty("已完成户数")
@ExcelProperty("已完成户数")
private String completedNumber;
@ApiModelProperty("完成率")
@ExcelProperty("完成率")
private String inspectionCompletionRate;
@ApiModelProperty("超期状态")
@ExcelProperty("超期状态")
private String isItOverdue;
@ApiModelProperty("状态")
@Dict(code = "planStatus", fieldName = "planStatusName")
@ExcelProperty("状态")
private String planStatus;
@ApiModelProperty("创建时间")
@ExcelProperty("创建时间")
private String createTime;
@ApiModelProperty("结束日期")
@ExcelIgnore // 忽略此字段不输出到Excel中
private String endTime;
}
Service 层
在Service层中,我们将具体实现导出逻辑。这个例子展示了如何准备要导出的数据,并通过EasyExcel库将其写入HTTP响应流中,以便用户可以下载生成的Excel文件。
java
@Service
public class SiteInspectPlanHomeService {
/**
* 导出检查计划信息为Excel文件。
*
* @param request HTTP请求对象,用于获取请求信息。
* @param response HTTP响应对象,用于设置响应头和写出文件流。
* @param dataFromVo 包含查询条件的数据传输对象。
*/
@Override
public void exportInspectionPlan(HttpServletRequest request, HttpServletResponse response, DataFromVo dataFromVo) {
try {
// 根据业务需求处理dataFromVo并获取要导出的数据列表
List<ExportPlanInformationVo> planVos = prepareDataForExport(dataFromVo);
// 给文件命名
String fileName = "现场巡视计划报表";
// 设置响应内容类型为Excel格式,并编码防止中文乱码问题
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
// 设置文件名并处理URL编码
fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
// 文件下载方式(附件下载还是在当前浏览器打开)
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
// 使用EasyExcel进行数据写入操作
EasyExcel.write(response.getOutputStream(), ExportPlanInformationVo.class)
.sheet("现场巡视计划报表") // 指定工作表名称
.doWrite(planVos); // 写入数据到Excel文件
} catch (Exception e) {
log.error("导出过程中出现错误 {}", e);
throw new RuntimeException("导出失败,请稍后再试!");
}
}
/**
* 准备要导出的数据。
*
* @param dataFromVo 查询条件
* @return 要导出的数据列表
*/
private List<ExportPlanInformationVo> prepareDataForExport(DataFromVo dataFromVo) {
// 这里需要根据你的业务逻辑去查询数据库或其它数据源,并转换成ExportPlanInformationVo列表
// 示例代码:
List<ExportPlanInformationVo> planVos = new ArrayList<>();
// 填充数据...
return planVos;
}
}
最后
上述代码段详细描述了如何在Spring Boot应用程序中集成EasyExcel以实现检查计划信息的导出功能。每个部分都包含了必要的注释和说明,确保开发者能够理解每一行代码的作用以及整个流程的工作原理。此外,还特别注意了对异常情况的处理,保证即使发生错误也能够给出适当的反馈信息。