tp5通过PhpSpreadsheet 导出Excel文档简单流程演示

//通过composer安装到vend后直接引入

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

//数据库查询的内容直接调用,excel函数,传入文件名称和数据即可

 //excel写入
    public function excle($fileName='test.xlsx',$data){
    
    
        /* 写入excel */
        $spreadsheet = new Spreadsheet();
        $worksheet = $spreadsheet->getActiveSheet();
        
        //设置工作表标题名称
        $worksheet->setTitle('用户信息表');
         
        //表头
        //设置单元格内容
        $worksheet->setCellValueByColumnAndRow(1, 1, '用户信息表');
        $worksheet->setCellValueByColumnAndRow(1, 2, '用户名');
        $worksheet->setCellValueByColumnAndRow(2, 2, '手机');
        $worksheet->setCellValueByColumnAndRow(3, 2, '省');
        $worksheet->setCellValueByColumnAndRow(4, 2, '市');
        $worksheet->setCellValueByColumnAndRow(5, 2, '区');
        $worksheet->setCellValueByColumnAndRow(6, 2, '详细地址');

        //合并单元格第一行
        $worksheet->mergeCells('A1:F1');
        
        //设置列宽
        $spreadsheet->getActiveSheet()->getColumnDimension('A')->setWidth(30);
        $spreadsheet->getActiveSheet()->getColumnDimension('B')->setWidth(30);
        $spreadsheet->getActiveSheet()->getColumnDimension('F')->setWidth(60);
        //读取数据
        $len=count($data); //数组长度
        for ($i=0; $i < $len; $i++) {
    
     
            $j = $i + 3; //从表格第3行开始
            $worksheet->setCellValueByColumnAndRow(1, $j, $data[$i]['nickname']);
            $worksheet->setCellValueByColumnAndRow(2, $j, $data[$i]['phone']);
            $worksheet->setCellValueByColumnAndRow(3, $j, $data[$i]['province']);
            $worksheet->setCellValueByColumnAndRow(4, $j, $data[$i]['city']);
            $worksheet->setCellValueByColumnAndRow(5, $j, $data[$i]['county']);
            $worksheet->setCellValueByColumnAndRow(6, $j, $data[$i]['address']);
        }

        
        // $writer = new Xlsx($spreadsheet);
        // $writer->save($fileName);
        
       // $downloadFileName='123.xlsx';
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header("Content-Disposition: attachment;filename=$fileName");
        header('Cache-Control: max-age=0');
        $writer    = new Xlsx($spreadsheet,'Xlsx');
        $writer->save('php://output');
        

    }

效果图
在这里插入图片描述
注意:
如果前台使用ajax访问函数,可能会出现phpExcel导出excel文件浏览器一直不会出现下载弹框的问题
解决办法:这个问题,说是因为:html用了ajax,导致必须返回数据,与header输出浏览器冲突,导致无法输出excel,并且乱码,使用url方式直接访问即可。

  location.href = "{:url('exports')}"  //直接通过访问地址就可以
  

前台改成了url访问的模式,结果就好了。

猜你喜欢

转载自blog.csdn.net/wkj001/article/details/129226700