后台数据放到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)
  }

  

posted @ 2019-08-23 09:47  fightForLife  阅读(1058)  评论(0编辑  收藏  举报