目录

Vue后端实现Excel下载

Vue+后端实现Excel下载

后端

 @PostMapping("/exportAttendanceHistory")
    public ResponseEntity exportAttendanceHistory(@RequestBody WcrWorkAttendanceDetailsHistory param){

        XSSFWorkbook book = new XSSFWorkbook();
        try {
            List<WcrWorkAttendanceDetailsHistory> list = iWcrWorkAttendanceDetailsHistoryService.exportAttendanceHistory(param);
            if (!CollectionUtils.isEmpty(list)) {

                XSSFSheet sheet = book.createSheet("mySheent");

                String[] vals = {"姓名", "班级名称","课程名称","上课老师","课程节次", "教室位置","周次",  "签到时间", "考勤结果","生成日期"};

                createExcel(sheet, 0, vals);

                for(int i = 0;i<list.size();i++){
                    String[] vals2 = new String[]{list.get(i).getXm(),
                            list.get(i).getBmMc(),
                            list.get(i).getKcmc(),
                            list.get(i).getSkls(),
                            list.get(i).getJc(),
                            list.get(i).getQymc(),
                            list.get(i).getWeek(),
                            list.get(i).getCheckInTime() == null ? "未打卡" : list.get(i).getCheckInTime().toString(),
                            list.get(i).getKqjg(),
                            list.get(i).getScrq()};

                    createExcel(sheet,i + 1, vals2);
                }
            }

            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

            book.write(outputStream);

            book.close();

            HttpHeaders headers = new HttpHeaders();

            headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
            headers.add("Content-Disposition", String.format("attachment; filename=%s", "历史考勤信息.xlsx"));
            headers.add("Pragma", "no-cache");
            headers.add("Expires", "0");
            headers.add("Access-Control-Expose-Headers", "Content-Disposition");

            return ResponseEntity
                    .ok()
                    .headers(headers)
                    .contentType(MediaType.APPLICATION_OCTET_STREAM)
                    .body(outputStream.toByteArray());
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }
private void createExcel(XSSFSheet sheet, int rowNo, String[] vals)  {
        if (vals.length > 0) {
            XSSFRow row = sheet.createRow(rowNo);
            for (int i = 0; i < vals.length; i++) {
                String val = vals[i];
                XSSFCell cell = row.createCell(i);
                cell.setCellValue(val);
            }
        }
    }

前端

 <el-button icon="el-icon-download" size="medium" v-loading="exportLoading" element-loading-text="拼命下载中" type="primary" @click="exportExcel">导出</el-button>




exportExcel(){
      this.exportLoading = true;
      exportAttendanceHistory(this.attendanceDetail).then(res=>{
        if(!res) {
            this.$notify.error({
              title: '操作失败',
              message: '文件下载失败'
            })
        }

          const url = window.URL.createObjectURL(res.data)
          const link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
          // 获取服务器端的文件名
          link.setAttribute('download', "历史考勤信息.xlsx")
          document.body.appendChild(link)
          link.click()
          this.exportLoading = false;
      })
    },