【求助】vue element的后台管理系统中,怎么实现,点击按钮下载excel文件?

想要实现效果的主要流程:
1、后台系统中,根据数据表格,先选择的数据
2、点击导出成为excel文件
3、把选中的数据ID请求到php后端
4、后端根据ID查询数据,并生成excel文件下载


但目前的后端代码如下:

public function excel_export($name='测试表', $data=[], $head=[], $keys=[]){
        $count = count($head);  //计算表头数量

        $spreadsheet = new Spreadsheet();
        $sheet = $spreadsheet->getActiveSheet();

        for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始,循环设置表头:
            $sheet->setCellValue(strtoupper(chr($i)) . '1', $head[$i - 65]);
        }

        /*--------------开始从数据库提取信息插入Excel表中------------------*/


        foreach ($data as $key => $item) {             //循环设置单元格:
            //$key+2,因为第一行是表头,所以写到表格时   从第二行开始写

            for ($i = 65; $i < $count + 65; $i++) {     //数字转字母从65开始:
                $sheet->setCellValue(strtoupper(chr($i)) . ($key + 2), $item[$keys[$i - 65]]);
                $spreadsheet->getActiveSheet()->getColumnDimension(strtoupper(chr($i)))->setWidth(20); //固定列宽
            }

        }

        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $name . '.xlsx"');
        header('Cache-Control: max-age=0');
        $writer = new Xlsx($spreadsheet);
        $writer->save('php://output');

        //删除清空:
        $spreadsheet->disconnectWorksheets();
        unset($spreadsheet);
        exit;
    }
   
   // 导出excel
   public function excel(){

        //设置表头:
        $head = ['ID','标题'];

        //数据中对应的字段,用于读取相应数据:
        $keys = ['id', 'title'];
        
        $info=Db::name('info')
                 ->field('id,title')
                 ->order('id asc')
                 ->select();
        $this->excel_export('测试表', $info, $head, $keys);
   }

问题:
直接请求excel方法是可以在浏览器中下载excel文件的
不知道怎么与vue结合,在vue点击按钮后,在浏览器中下载这个excel文件,求助大家了

阅读 5.3k
2 个回答
api({...arg})
  .then(res => {
      let url = window.URL.createObjectURL(new Blob([res]))
      let link = document.createElement('a')
      link.style.display = 'none'
      link.href = url
      link.setAttribute('download', 'xxxname.xls')
      document.body.appendChild(link)
      link.click()
  })

window.open('url', '_self')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题