PHPexcel导出demo

PHPexcel导出

写过很多次的导出,依旧每次导出的时候都会忘记一些必要参数,趁着有时间记录下

参数设置 $header 列头

    $datas 数据
    $fileName 文件名称
    $sheet sheet名称
    $isDown 文件保存到指定文件还是直接输出
 
 public  function excelout($header,$datas,$fileName,$sheet,$isDown=false)
    {
        ini_set ("memory_limit","-1"); //内存无限制
        $obj = new PHPExcel();
        $obj->setActiveSheetIndex(0); //激活默认sheet
        $obj->getActiveSheet()->setTitle($sheet); //设置激活sheet的名称
        //头部及列设置 
        $jisuan = 0;
        foreach ($header as $key=>$headerlist ){
            if($key>25){ //当导出列大于25列时处理
                $list[]= chr(65).chr(65+$jisuan);
                $obj->getActiveSheet()->getColumnDimension(chr(65).chr(65+$jisuan))->setWidth(20);
                $obj->getActiveSheet()
                    ->setCellValue($list[$key] . 1, $headerlist);
            }else{
                $list[]=chr(65+$jisuan);
                $obj->getActiveSheet()->getColumnDimension(chr(65+$jisuan))->setWidth(20);
                $obj->getActiveSheet()
                    ->setCellValue($list[$key] . 1, $headerlist);
            }
            if($jisuan == 25){
                $jisuan = 0;
            }else{
                $jisuan++;
            }
        }
        //渲染数据部分
        $i = 2;
        foreach ($datas as $data){
            $j=0;
            foreach ($data as $key=>$datalist){
                $obj->getActiveSheet()
                    ->setCellValue($list[$j] . $i,$datalist);
                $j++;
            }
            $i++;
        }
//        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
        header('Cache-Control: max-age=1');
        header("Content-type: application/vnd.ms-excel");
        header("Content-Type: application/force-download");
        header("Expires: 0");
        header("Pragma: no-cache");
        $objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel5');
        if($isDown){   //下载文件到服务器
            $url = Core::Instance()->getAppPath();
                $file = '/temp/'.$fileName.'.xlsx';
                $_savePath = $url.$file;
                $mode = 0777;
                if (!is_dir($url)){//判断路径是否存在 不存在则创建
                   @mkdir($url, $mode);
                    @chmod($url,0777);
                    if(is_file($_savePath)){//判断文件是否存在,存在则删除
                        unlink($_savePath);
                    }
                    $objWriter->save($_savePath);
                    return $file;
                } else{
                    if(is_file($_savePath)){
                        unlink($_savePath);
                    }
                    $objWriter->save($_savePath);//保存文件到指定路径
                    return $file;
                }

        }else{
            header("Content-Disposition:attachment;filename=$fileName.xls");
            $objWriter->save('php://output');exit; 直接输出到浏览器
        }

    }


//导出单一查询数据量过大时查询分sheet
 ini_set ("memory_limit","-1");
        $name = trim( $this->request("name"));
        $staffname = trim( $this->request("staffname"));
        $start_time = trim($this->request("start_time"));
        $end_time = trim($this->request("end_time"));
        $header = ['序列号','姓名']; //列表头
        $total = 10000; //总数据条数
        $obj = new PHPExcel(); //实例化
        $obj->removeSheetByIndex(0); //避免缓存
        $sheet = 'sheet名称';
        $fileName = "文件名称";
        for ($i = 0; $i<=intval($total/100);$i++){//每一百条为一个sheet
            $datast = 'sql查询出来的数据';
//            var_dump($datast);die;
            $obj->createSheet($i); //创建sheet
            $obj->setActiveSheetIndex($i);//激活sheet
            $obj->getActiveSheet()->setTitle($sheet.$i); //给sheet命名

            //头部及列设置
            foreach ($header as $key=>$headerlist ){
                $list[]=chr(65+$key);
                $obj->getActiveSheet()->getColumnDimension(chr(65+$key))->setWidth(20);
                $obj->getActiveSheet()
                    ->setCellValue($list[$key] . 1, $headerlist);
            }

            foreach ($datast[1] as $key=>$value){
                $datas[$key]['id']=$value['id']??'';
                $datas[$key]['name']=$value['name']??'';
             
            }
            //内容部分
            $n = 2;
            foreach ($datas as $data){
                $j=0;
                foreach ($data as $datalist){
                    $obj->getActiveSheet()
                        ->setCellValue($list[$j] . $n,$datalist);
                    $j++;
                }
                $n++;
            }
        }

        $obj->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header("Content-type: application/vnd.ms-excel");
        header("Content-Type: application/force-download");
        header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
        header('Cache-Control: max-age=1');
        header("Expires: 0");
        header("Pragma: no-cache");
        $objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel5');
        $objWriter->save('php://output'); //浏览器输出

你可能感兴趣的:(PHP,php)