导出excel,后端返回文档流。前后端代码
后端代码,方便查看,放在一起了
/**
* 导出报名表
*/
@Log("导出报名表")
@GetMapping( "/export")
@ResponseBody
@RequiresPermissions("platform:activity:export")
public void export(HttpServletResponse response,@RequestParam("id") Integer id) throws Exception {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
List list = activityService.listEnrollInfo(id);
if (list == null || list.get(0).getEnrollNum() == 0) {
throw new Exception("报名人数为0,无法导出!");
}
response.reset();
response.setCharacterEncoding("utf-8");
String fileName = list.get(0).getActivityName()+"报名信息";
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet(fileName);
XSSFRow row = null;
row = sheet.createRow(0);//创建第一个单元格
row.setHeight((short) (400));
row.createCell(0).setCellValue("活动名称");
row.createCell(1).setCellValue("报名人数");
row.createCell(2).setCellValue("学员姓名");
row.createCell(3).setCellValue("城市");
row.createCell(4).setCellValue("手机号");
row.createCell(5).setCellValue("邮箱");
row.createCell(6).setCellValue("备注");
for (int i = 0; i < list.size(); i++) {
row = sheet.createRow(i + 1);
ActivityEnrollInfo devmonitorData = list.get(i);
row.createCell(0).setCellValue(devmonitorData.getActivityName());
row.createCell(1).setCellValue(devmonitorData.getEnrollNum());
row.createCell(2).setCellValue(devmonitorData.getName());
row.createCell(3).setCellValue(devmonitorData.getCity());
row.createCell(4).setCellValue(devmonitorData.getMobile());
row.createCell(5).setCellValue(devmonitorData.getEmail());
}
sheet.setDefaultRowHeight((short) (400));
//列宽自适应
for (int i = 0; i <= 13; i++) {
sheet.autoSizeColumn(i);
}
response.setContentType("application/vnd.ms-excel;charset=utf-8");
OutputStream os = null;
try {
os = response.getOutputStream();
response.addHeader("Content-disposition", "attachment;filename=" + fileName + "-" + simpleDateFormat.format(new Date()) + ".xlsx");//默认Excel名称
wb.write(os);
os.flush();
os.close();
return;
} catch (IOException e) {
e.printStackTrace();
}
return;
}
前端代码
因为是返回文档流,采用window.open(urls); 的方式下载excel。注意这种方式需要后台是支持get请求