基本上都有过这样的需求:几个条件筛选出一部分数据以表格形式展现,功能按钮旁边有个导出,一般是以Excel的形式导出,这里就以easyExcel介绍一下数据导出的具体实现
jar包:
<!--excel导入导出资源包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.0-beta2</version>
</dependency>
controller:
@ApiOperation(value = "年度考核列表导出",notes = "年度考核列表导出")
@ApiImplicitParams({@ApiImplicitParam(name="planId", value="任务ID")})
@RequestMapping(value="/year/export", method = RequestMethod.GET)
@ResponseBody
public void listYearDetailExport(HttpServletResponse response, String id) {
try{
// 导出数据集
List<ExportYearTask> list = planService.listYearTaskExport(id, 1);
String fileName = "年度考核任务" + System.currentTimeMillis();
response.setContentType("multipart/form-data;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8") + ".xlsx");
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).head(ExportYearTask.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet(0, "年度考核任务").build();
//写数据到sheet
excelWriter.write(list, writeSheet);
excelWriter.finish();
} catch (Exception e){
log.error("/plan/year/export 异常", e);
}
}
ExportYearTask类:
package com.kindo.monitor.plan.model;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @author liangliang
* @date 2021/1/17 14:34
*/
@Data
public class ExportYearTask {
@ExcelProperty(value = "医院名称", index = 0)
private String hospitalName;
@ExcelProperty(value = "医院等级", index = 1)
private Integer hospitalLevel;
@ExcelProperty(value = "评分状态", index = 2)
private String planDetailState;
@ExcelProperty(value = "考核得分", index = 3)
private BigDecimal totalScore;
@ExcelProperty(value = "硬性指标得分", index = 4)
private BigDecimal hardScore;
@ExcelProperty(value = "柔性指标得分", index = 5)
private BigDecimal softScore;
}
list对象是根据条件查询出的结果,SQL查询出的字段名和封装的实体类字段名一样即可