PHPExcel动态生成可视化数据

先上代码之后有空再整理

public function showExcel(){
    
    
        $post = $this->request->post();
        $data = $post['paydatainfo2'];
        $data = json_decode($data,1);

        $gid=array();     // GID

        foreach ($data as $it){
    
    
            if (!empty($it['GID'])){
    
    

                if (empty($gid)){
    
    
                    array_push($gid,$it['GID']);
                }else{
    
    
                    if (in_array($it['GID'],$gid)){
    
    
                        continue;
                    }else{
    
    
                        array_push($gid,$it['GID']);
                    }
                }
            }
        }

        // 将数据分组
        $exceldata=array();
        foreach ($gid as $itd){
    
    
            $temp=array();
            foreach ($data as $it){
    
    
                if ($it['GID']==$itd){
    
    
                    array_push($temp,$it);
                }
            }
            $exceldata[$itd]=$temp;
        }

        // 数据统计处理
        $data = array();
        foreach ($gid as $itd){
    
    
            $datatime=array();
            $xsldata=array();
            foreach ($exceldata[$itd] as $item){
    
    
                if (!empty($item['created'])){
    
    
                    if(empty($datatime)){
    
    
                        array_push($datatime,date('Y-m-d',$item['created']));
                    }else{
    
    
                        if (in_array(date('Y-m-d',$item['created']),$datatime)){
    
    
                            continue;
                        }else{
    
    
                            array_push($datatime,date('Y-m-d',$item['created']));
                        }
                    }
                }
            }
            $tol_uid=0;      //注册人数
            $tol_sex=0;       //创角人数
            $tol_usex=0;     //通过姓名页人数
            $tol_ustask=0;    //完成任务1人数
            foreach ($datatime as $time){
    
    
                foreach ($exceldata[$itd] as $item){
    
    
                    if ($time == date('Y-m-d',$item['created'])&&!empty($item['uid'])){
    
    
                        $tol_uid+=1;
                    }
                    if ($time == date('Y-m-d',$item['created'])&&$item['sex']==1){
    
    
                        $tol_sex+=1;
                    }
                    if ($time == date('Y-m-d',$item['created'])&&$item['sex']==1&&!empty($item['name'])){
    
    
                        $tol_usex+=1;
                    }
                    if ($time == date('Y-m-d',$item['created'])&&$item['sex']==1&&!empty($item['name'])&&$item['taskid']>1){
    
    
                        $tol_ustask+=1;
                    }

                }
//                array_push($xsldata,['datetime'=>$time,'uid'=>$tol_uid,'sex'=>$tol_sex,'usex'=>$tol_usex,'ustsk'=>$tol_ustask,'uspers'=>round($tol_sex/$tol_uid*100).'%','usexpass'=>round($tol_usex/$tol_uid*100).'%','comtask'=>round($tol_ustask/$tol_uid*100).'%']);
                array_push($xsldata,[$time,$tol_uid,$tol_sex,$tol_usex,$tol_ustask,round($tol_sex/$tol_uid*100).'%',round($tol_usex/$tol_uid*100).'%',round($tol_ustask/$tol_uid*100).'%']);

            }
            $data[$itd]=$xsldata;
        }

      Vendor('PHPExcel.PHPExcel');//调用类库,路径是基于vendor文件夹的
      Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');
      Vendor('PHPExcel.PHPExcel.Writer.Excel2007');
      $objExcel = new \PHPExcel();
      //set document Property
      $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel2007');
      $objActSheet = $objExcel->getActiveSheet();

      $fileName = $post['fileName2'];
      $arrHeader = explode(',',$post['arrHeader2']);
      $length = count($arrHeader);
      $letter = explode(',',"A,B,C,D,E,F,G,H,I,J,K");
      for ($i=0;$i<$length;$i++){
    
    
         $objActSheet->setCellValue("$letter[$i]1","$arrHeader[$i]");
      }
      $k=2;
      $j=2;
      foreach ($gid as $ke=>$itd){
    
    

          $num = count($data[$itd]);
          $k1=$num+$k-1;
          $objActSheet->setCellValue($letter[0].$k,$itd);
          $objActSheet->setCellValue($letter[1].$k,$itd);
          $objActSheet->mergeCells($letter[0].$k.':'.$letter[0].$k1);
          $objActSheet->mergeCells($letter[1].$k.':'.$letter[1].$k1);
          $k=$k1+1;
          for ($i=0;$i<$num;$i++){
    
    

              for ($x=0;$x<count($data[$itd][$i]);$x++){
    
    

                  $objActSheet->setCellValue($letter[$x+2].$j,$data[$itd][$i][$x]);

              }
              $j++;
          }

      }

      $width = array(10,10,10,10,10);
      //设置表格的宽度
      $objActSheet->getColumnDimension('A')->setWidth($width[3]);
      $objActSheet->getColumnDimension('B')->setWidth($width[3]);
      $objActSheet->getColumnDimension('C')->setWidth($width[4]);
      $objActSheet->getColumnDimension('D')->setWidth($width[3]);
      $objActSheet->getColumnDimension('E')->setWidth($width[3]);
      $objActSheet->getColumnDimension('F')->setWidth($width[3]);
      $objActSheet->getColumnDimension('G')->setWidth($width[3]);


      $outfile = Date('YmdHis',time())."$fileName.xlsx";

      ob_end_clean();
      header("Content-Type: application/force-download");
      header("Content-Type: application/octet-stream");
      header("Content-Type: application/download");
      header('Content-Disposition:inline;filename="'.$outfile.'"');
      header("Content-Transfer-Encoding: binary");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header("Pragma: no-cache");
      $objWriter->save('php://output');
  }

Guess you like

Origin blog.csdn.net/weixin_41429587/article/details/119461159