引入excel依赖
<!-- excel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
导出数据实体类
package com.hzzs.base.vo.excel;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
/**
* 音频收听量导出表格
*/
@Data
public class AudioPlayExcelVo {
/**
* 日期
*/
@ExcelProperty("日期")
@ColumnWidth(20)
private String date;
/**
* 音频名
*/
@ExcelProperty("音频名")
@ColumnWidth(50)
private String audioName;
/**
* 所属专辑名
*/
@ExcelProperty("所属专辑名")
@ColumnWidth(50)
private String albumName;
/**
* 收听量
*/
@ExcelProperty("收听量")//需要查询出来,并需要在导出excel文档中展示
@ColumnWidth(20)
private Integer listenIn;
/**
* 收听人数
*/
@ExcelIgnore//需要查询出来,但不需要在导出excel文档中展示
private Integer listenInUsers;
/**
* 总的收听时长
*/
@ExcelIgnore
private Integer totalListeningTime;
/**
* 人均收听时长 s
*/
@ExcelProperty("人均收听时长")
@ColumnWidth(20)
private Double averageListeningTime;
}
导出为excel文档(控制器中代码)
/**
* 音频收听量导出表格
* @return
*/
@GetMapping("/audioPlayExcelExport")
public void audioPlayExcelExport(ExcelQuery model, HttpServletResponse response){
try {
String fileName = "音频收听量导出表格_" + new SimpleDateFormat("yyMMdd_HHmmss").format(new Date());
List<AudioPlayExcelVo> data = logAudioPlayService.listAudioPlayExcel(model)
.stream()
.collect(Collectors.toList());
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setContentType("application/octet-stream");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + encodedFileName + ".xlsx");
EasyExcel.write(response.getOutputStream(), AudioPlayExcelVo.class)
.autoCloseStream(false)
.sheet("Sheet1")
.doWrite(data);
} catch (IOException e) {
throw new ServiceException("音频收听量导出表格异常", e);
}
}