前端方法:
/*后台流导出*/
exportFile({url, fileName, type, data}) {
let xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
xhr.responseType = "blob"; // 返回类型blob
//发送空内容请求
xhr.send(JSON.stringify(data));
fileName = `${fileName}.${type}`;
if (type === 'pdf') {
type = 'application/pdf';
}else if (type === 'xls') {
type = 'application/vnd.ms-excel';
}else if (type === 'doc') {
type = 'application/msword';
}
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
// 数据在 this.response 保存
let blob = new Blob([this.response], {
type: type
});
// 创建a链接 href链接地址 download为下载下来后文件的名称
let aa = document.createElement('a');
aa.href = URL.createObjectURL(blob);
aa.innerHTML = 'a链接';
aa.download = fileName;
document.body.appendChild(aa);
aa.click();
document.body.removeChild(aa);
URL.revokeObjectURL(blob)
}
}
}
后端代码:
List<TjColHfglExcel> excel = TjColHfglDao.getTjColHfglByExcel(dto, session);
//对结果进行字典转换
if (CollUtil.isNotEmpty(excel)) {
for (TjColHfglExcel tjColHfglExcel : excel) {
tjColHfglExcel.setColorFinally(riskLevelDic.get(tjColHfglExcel.getColorFinally()));
tjColHfglExcel.setHffs(followUpMethodDic.get(tjColHfglExcel.getHffs()));
tjColHfglExcel.setZxzt(executionStatusDic.get(tjColHfglExcel.getZxzt()));
tjColHfglExcel.setGlys(bbpPersonDic.get(tjColHfglExcel.getGlys()));
tjColHfglExcel.setDxbz(sfDic.get(tjColHfglExcel.getDxbz()));
//处理时间 将时间格式转成yyyy_MM_dd
if (StrUtil.isNotEmpty(tjColHfglExcel.getHfrq())){
tjColHfglExcel.setHfrq(tjColHfglExcel.getHfrq().substring(0,10));
}
if (StrUtil.isNotEmpty(tjColHfglExcel.getZxrq())){
tjColHfglExcel.setZxrq(tjColHfglExcel.getZxrq().substring(0,10));
}}
}
//设置表头
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.addHeaderAlias("xm", "姓名");
writer.addHeaderAlias("colorFinally", "风险等级");
writer.addHeaderAlias("tjbh", "体检编号");
writer.addHeaderAlias("lxdh", "联系电话");
writer.addHeaderAlias("hfrq", "回访日期");
writer.addHeaderAlias("glys", "管理医生");
writer.addHeaderAlias("hffs", "回访方式");
writer.addHeaderAlias("departmentinfo", "社区");
writer.addHeaderAlias("dxbz", "短信");
writer.addHeaderAlias("zxrq", "执行日期");
writer.addHeaderAlias("zxr", "执行人");
writer.addHeaderAlias("zxzt", "执行状态");
writer.write(excel, true);
//response为HttpServletResponse对象
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename=test.xlsx");
ServletOutputStream out=response.getOutputStream();
writer.flush(out, true);
writer.close();
IoUtil.close(out);