vue部分
// 导出计算数据exportDataHandle(id) {this.$http({url: this.$http.adornUrl('/xxx/xxx/exportCalDataExcel'),method: 'post',data: this.$http.adornData({'id': id}),responseType: 'blob', // 重要:告诉axios我们希望接收二进制数据}).then(({data}) => {const blob = new Blob([data], {type: 'data:application/vnd.ms-excel;base64;charset=utf-8'});const downloadElement = document.createElement('a');const href = window.URL.createObjectURL(blob); // 创建下载的链接downloadElement.href = href;downloadElement.download = 'abc' + '.xlsx'; // 下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); // 点击下载document.body.removeChild(downloadElement); // 下载完成移除元素window.URL.revokeObjectURL(href); // 释放掉blob对象this.$message({message: '操作成功',type: 'success',duration: 1500,})})},
Java部分
1导入maven依赖
这里要注意,由于easyexcel的包中包含了poi的依赖,所以在引入easyexcel包之前,需要删掉mavne中poi的包,否则会出现依赖异常:com.alibaba.excel.exception.ExcelGenerateException: java.lang.NoSuchFieldError: Factory
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.79</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.10</version></dependency>
2 编写代码
import com.alibaba.excel.EasyExcel; /*** 导出 计算数据*/@RequestMapping("/exportCalDataExcel")public void exportCalDataExcel(@RequestBody ExamEntity exam, HttpServletResponse response) throws IOException {//1 数据获取List<CalDataDto> dataList = answerScoreService.getAllCalData(exam);//2 设置响应头response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码String fileName = URLEncoder.encode("文件名", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");// 3 将数据写入excel中EasyExcel.write(response.getOutputStream(), CalDataDto.class).sheet("Sheet1").doWrite(dataList);}
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;@Data
public class CalDataDto {@ExcelProperty("变量名")
// @ColumnWidth(10)private String name;@ExcelProperty("数据")private Double num;
}