1.后端代码:
@Override public boolean exportExcelForUserList(HttpServletRequest request, HttpServletResponse response,Map map) throws IOException { boolean boo= false; List<User> list = getUserListByConditions(map); request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/x-download"); String fileName = "用户列表.xlsx"; fileName = URLEncoder.encode(fileName, "UTF-8"); response.addHeader("Content-Disposition", "attachment;filename=" + fileName); // 第一步:定义一个新的工作簿 XSSFWorkbook wb = new XSSFWorkbook(); // 第二步:创建一个Sheet页 XSSFSheet sheet = wb.createSheet("startTimeendTime"); sheet.setDefaultRowHeight((short) (2 * 256));//设置行高 sheet.setColumnWidth(0, 4000);//设置列宽 sheet.setColumnWidth(1,5500); sheet.setColumnWidth(2,5500); sheet.setColumnWidth(3,5500); sheet.setColumnWidth(11,3000); sheet.setColumnWidth(12,3000); sheet.setColumnWidth(13,3000); XSSFFont font = wb.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 16); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); cell.setCellValue("用户ID "); cell = row.createCell(1); cell.setCellValue("用户名 "); cell = row.createCell(2); cell.setCellValue("真实姓名"); cell = row.createCell(3); cell.setCellValue("密码"); cell = row.createCell(4); cell.setCellValue("年龄"); cell = row.createCell(5); cell.setCellValue("性别 "); cell = row.createCell(6); cell.setCellValue("手机号码 "); cell = row.createCell(7); cell.setCellValue("邮箱 "); cell = row.createCell(8); cell.setCellValue("权限等级"); cell = row.createCell(9); cell.setCellValue("生日"); cell = row.createCell(10); cell.setCellValue("住址 "); cell = row.createCell(11); cell.setCellValue("备注"); cell = row.createCell(12); cell.setCellValue("创建人"); cell = row.createCell(13); cell.setCellValue("创建时间"); XSSFRow rows; XSSFCell cells; for (int i = 0; i < list.size(); i++) { // 第三步:在这个sheet页里创建一行 rows = sheet.createRow(i+1); // 第四步:在该行创建一个单元格 cells = rows.createCell(0); // 第五步:在该单元格里设置值 cells.setCellValue(list.get(i).getId()); cells = rows.createCell(1); cells.setCellValue(list.get(i).getUsername()); cells = rows.createCell(2); cells.setCellValue(list.get(i).getRealname()); cells = rows.createCell(3); cells.setCellValue(list.get(i).getPassword()); cells = rows.createCell(4); cells.setCellValue(list.get(i).getAge()); cells = rows.createCell(5); if (list.get(i).getSex()=="0"){ cells.setCellValue("女"); }else{ cells.setCellValue("男"); } cells = rows.createCell(6); cells.setCellValue(list.get(i).getPhone()); cells = rows.createCell(7); cells.setCellValue(list.get(i).getEmail()); cells = rows.createCell(8); if(list.get(i).getAccesslevel()=="1"){ cells.setCellValue("系统管理员"); }else if(list.get(i).getAccesslevel()=="2"){ cells.setCellValue("管理员"); }else { cells.setCellValue("普通用户"); } cells = rows.createCell(9); cells.setCellValue(list.get(i).getBirthday()); cells = rows.createCell(10); cells.setCellValue(list.get(i).getAddress()); cells = rows.createCell(11); cells.setCellValue(list.get(i).getRemark()); cells = rows.createCell(12); cells.setCellValue(list.get(i).getCreateUser()); cells = rows.createCell(13); if (null==list.get(i).getCreateTime()){ cells.setCellValue(""); }else { cells.setCellValue(list.get(i).getCreateTime()); } } BufferedOutputStream fos = null; try { fos = new BufferedOutputStream(response.getOutputStream()); wb.write(fos); boo = true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if (fos != null) fos.close(); } return boo; }
2.前端请求方法(重点是:window.location.href(除此还有很多方法)):
我之前一直用的是$axios.post请求的导致浏览器无法打开文件下载提示窗口
handleSubmit(name) {
this.$refs[name].validate((valid) => {
if (valid) {
window.location.href = '/api/sshdemo/login/exportExcelForUserList.c?'+this.$qs.stringify(this.formInline);
/*this.instance.exportExcelForUser( //由于要解决跨域问题,使用代理的方式进行请求
this.$qs.stringify(this.formInline)//请求的表单数据
).then(res=>{
}).catch(function (error) {
console.log(error);
});*/
} else {
this.$Message.error('Fail!');
}
})
}
以下是vue的代理请求:其中api是封装的可跨域请求的IP及端口:
const instance = axios.create({ timeout: 10000, headers: { 'Content-Type': "application/x-www-form-urlencoded; charset=UTF-8" } }); exportExcelForUser(data){ //下载用户信息 return instance.post('/api/sshdemo/login/exportExcelForUserList.c',data) }