后端:springboot+poi
前端:vue
前端单纯使用ajax是不可行的,返回格式不支持
方法:
1.直接使用window.href下载
2.使用Blob导出
@PostMapping("/exportMediUser")
public void getMediUserList(HttpServletResponse response){
log.info("导出excel");
// list : "导出数据"
exportExcel(list, response);
}
/**
* 导出excel
*
* @param list
* @return
*/
public void exportExcel(List<Object> list, HttpServletResponse response) {
//创建HSSFWorkbook对象(excel的文档对象)
HSSFWorkbook wb = new HSSFWorkbook();
//建立新的sheet对象(excel的表单)
HSSFSheet sheet = wb.createSheet("患者管理表");
int rowNum = 0;
int cellNum = 0;
HSSFRow row = sheet.createRow(rowNum);
//创建单元格并设置单元格内容
row.createCell(0).setCellValue("序号");
row.createCell(1).setCellValue("患者姓名");
row.createCell(2).setCellValue("性别");
row.createCell(3).setCellValue("年龄");
row.createCell(4).setCellValue("标签");
row.createCell(5).setCellValue("日期");
for (Object object : list) {
cellNum = 0;
HSSFRow currRow = sheet.createRow(++rowNum);
MediUser mediUser = (MediUser) object;
currRow.createCell(cellNum++).setCellValue(mediUser.getId());
currRow.createCell(cellNum++).setCellValue(mediUser.getName());
currRow.createCell(cellNum++).setCellValue(mediUser.getSex());
currRow.createCell(cellNum++).setCellValue(mediUser.getAge());
currRow.createCell(cellNum++).setCellValue(mediUser.getAnamnesis());
HSSFCell dateCell = currRow.createCell(cellNum++);
// 日期格式化
CellStyle cellStyle = wb.createCellStyle();
DataFormat format = wb.createDataFormat();
cellStyle.setDataFormat(format.getFormat(MyDateUtils.dateTimePattern));
dateCell.setCellStyle(cellStyle);
dateCell.setCellValue(mediUser.getCreateTime());
}
//输出Excel文件
try {
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition",
"attachment;filename=" + java.net.URLEncoder.encode("mediUser.xls", "UTF-8"));
response.flushBuffer();
wb.write(response.getOutputStream());
wb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
vue:
1、按钮调用下载接口
2、new Blob导出
PS:1、第一步请求接口时,注意要设置请求responseType为blob类型,否则下载后,显示格式错误,无法打开
2、new Blob请求是,注意修改type类型为application/vnd.ms-excel
引用:https://blog.csdn.net/weixin_40538702/article/details/109202026