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) }