后台數據放到excel中下載到本地(前端請求的方法也要注意)


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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM