dereckbu

1. 表格方式

 public function getVideoExcelExport(){
        $dataResult = Video::select(\'id\',\'title\',\'price_way\', \'playnum\',\'content\',\'video_type\')->get()->toArray();
        foreach ($dataResult as $k=>$v){
            //0免费 1VIP 2付费
            $dataResult[$k][\'price_way_text\'] = ($v[\'price_way\'] == 0)?\'免费\':(($v[\'price_way\'] == 1)?\'VIP\':\'付费\');
            $dataResult[$k][\'video_type_text\'] = MappingUtil::getTextByVideoType($v[\'video_type\']);
        }
        $headTitle = "视频记录";
        $title = "视频记录";
        $headtitle= "<tr style=\'height:50px;border-style:none;>\<th border=\"0\" style=\'height:60px;width:270px;font-size:22px;\' colspan=\'11\' >{$headTitle}</th></tr>";
        $titlename = "<tr> 
                   <th style=\'width:70px;\' >ID</th> 
                   <th style=\'width:300px;\' >标题</th> 
                   <th style=\'width:70px;\'>付费模式</th> 
                   <th style=\'width:70px;\'>视频类型</th> 
                   <th style=\'width:600px;\'>内容</th> 
               </tr>";
        $filename = $title.".xls";
        $this->excelData($dataResult,$titlename,$headtitle,$filename);
    }

 /*视频导出Excel */
    public function excelData($datas,$titlename,$title,$filename){

        $columns = [\'id\',\'title\',\'price_way_text\',\'video_type_text\',\'content\'];
        $str = "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\nxmlns:x=\"urn:schemas-microsoft-com:office:excel\"\r\nxmlns=\"http://www.w3.org/TR/REC-html40\">\r\n<head>\r\n<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>";
        $str .="<table border=1><head>".$titlename."</head>";
        //$str .= $title;
        $dataResult = [];
        foreach ($datas as $key=>$value){
            foreach ($columns as $k=>$v){
                if (isset($datas[$key][$v])){
                    $dataResult[$key][$v] = $datas[$key][$v];
                }
            }
        }
        foreach ($dataResult  as $key=> $rt ){
            $str .= "<tr>";
            foreach ( $rt as $k => $v )
            {
                $str .= "<td>{$v}</td>";
            }
            $str .= "</tr>\n";
        }
        $str .= "</table></body></html>";
        header( "Content-Type: application/vnd.ms-excel; name=\'excel\'" );
        header( "Content-type: application/octet-stream" );
        header( "Content-Disposition: attachment; filename=".$filename );
        header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
        header( "Pragma: no-cache" );
        header( "Expires: 0" );
        exit( $str );
    }

2. 不分sheet方式

use Excel;

    public function getMatchFinalTempWorkExcelExportModule(Request $request){
        $groupId = $request->get(\'match_group_id\',\'\');
        if(empty($groupId) || !is_numeric($groupId)){
            echo \'请传入正确match_group_id\';
            exit;
        }
        switch ($groupId){
            case 1:{
                $groupName = \'中年组\';
            }
            case 2:{
                $groupName = \'老年组\';
            }
            case 3:{
                $groupName = \'合唱组\';
            }
            default :{
                $groupName = \'未分组\';
            }
        }
        $where = [
            [\'final_score\',\'>\',0],
            [\'match_group_id\',\'=\',$groupId],
        ];
        $orderBy = [
            [\'final_score\',\'desc\']
        ];
        $dataResultDB = MatchFinalTempWork::getFinalTempWorkForAdmin([
            \'where\'=>$where,
            \'order_by\'=>$orderBy
        ]);
        $dataResult = [];
        if(!empty($dataResultDB[\'final_works\'])){
            $dataResult = $dataResultDB[\'final_works\'];
        }
        foreach ($dataResult as $k=>$v){
            $text = \'未分组\';
            if($v[\'match_group_id\'] == 1){
                $text = \'中年组\';
            }
            if($v[\'match_group_id\'] == 2){
                $text = \'老年组\';
            }
            if($v[\'match_group_id\'] == 3){
                $text = \'合唱组\';
            }
            $v[\'group_name\'] = $text;
            $dataResult[$k] = $v;
        }
        $columnsHead = [
            \'作品名称   \'
            ,\'编号   \'
            ,\'联系人   \'
            ,\'得分   \'
        ];
        $columns = [
            \'work_name\'
            , \'serial_no\'
            , \'contacter\'
            ,\'final_score\'
        ];
        $cellData = [];
        $cellData[] = $columnsHead;
        foreach ($dataResult as $k=>$v){
            $temp = [];
            foreach ($columns as $kc=>$vc){
                if (isset($v[$vc]) || is_null($v[$vc])){
                    $temp[$vc] = $v[$vc];
                }
            }
            $cellData[] = $temp;
        }
        $filename = $groupName."比赛结果";

        Excel::create($filename,function($excel) use ($groupName, $cellData){
            $excel->sheet($groupName, function($sheet) use ($cellData){
                $sheet->rows($cellData);
            });
        })->export(\'xls\');
    }

3.分sheet方式

use Excel;

//比赛作品导出
    public function getMatchWorkExcelExportModule(){
        $where = [
            [\'work_status\',4],
            [\'original_id\',\'>\',0],
        ];
        $orderBy = [
            [\'group_id\',\'asc\'],
            [\'matcher_area_id\',\'asc\']
        ];
        $dataResult = MatchWork::select(\'tb_match_work.work_name\', \'tb_match_work.matcher_name\',\'tb_match_work.matcher_age\',
            \'tb_match_work.support_num\', \'tb_match_work.work_desc\', \'tb_match_work.contacter\', \'tb_match_work.mobile\',
            \'tb_match_work.group_id\',\'tb_match_work.work_url\',\'tb_match_work.match_group_id\'
            ,\'city.name as city_name\'
            ,\'tb_match_final_work.title\',\'tb_match_final_work.type\'
            ,\'tb_match_resource.title as resource_title\'
        )
            ->leftjoin(\'city\',\'tb_match_work.matcher_area_id\',\'=\',\'city.id\')
            ->leftjoin(\'tb_match_final_work\',\'tb_match_final_work.work_id\',\'=\',\'tb_match_work.id\')
            ->leftjoin(\'tb_match_resource\',\'tb_match_resource.id\',\'=\',\'tb_match_final_work.resource_id\')
            ->baseWhere($where)
            ->baseOrderBy($orderBy)
            ->get()
            ->toArray();
        $areas = array_column($dataResult ,\'match_group_id\');
        sort($areas);
        $areas = array_unique($areas);
        foreach ($dataResult as $k=>$v){
            $text = \'未分组\';
            if($v[\'group_id\'] == 1){
                $text = \'中年组\';
            }
            if($v[\'group_id\'] == 2){
                $text = \'老年组\';
            }
            if($v[\'group_id\'] == 3){
                $text = \'合唱组\';
            }
            $v[\'group_name\'] = $text;
            unset($v[\'group_id\']);
            if(!empty($v[\'work_url\'])){
                $v[\'work_url\'] = UrlUtil::addCdnPrefix($v[\'work_url\']);
            }
            if($v[\'type\'] ==  2){
                $v[\'title\'] = $v[\'resource_title\'];
            }
            unset($v[\'resource_title\']);
            unset($v[\'type\']);
            $dataResult[$k] = $v;
        }
        $dataData = [];
        $columnsHead = [\'作品名称\',\'合唱团队名称\',\'支持数\'
            ,\'作品描述\'
            ,\'联系人\',\'联系电话\',\'年龄\',\'地区\'
            ,\'作品地址\'
            ,\'分组\',\'复赛作品\'];
        $columns = [\'work_name\', \'matcher_name\',
            \'support_num\'
            , \'work_desc\'
            , \'contacter\', \'mobile\',\'matcher_age\',\'city_name\'
            , \'work_url\'
            ,\'group_name\',\'title\'];
        foreach ($areas as $key=>$value){
            $cellData = [];
            $cellData[] = $columnsHead;
            foreach ($dataResult as $k=>$v){
                if($value == $v[\'match_group_id\']){
                    $temp = [];
                    foreach ($columns as $kc=>$vc){
                        if (isset($v[$vc]) || is_null($v[$vc])){
                            $temp[$vc] = $v[$vc];
                        }
                    }
                    $cellData[] = $temp;
                }
            }
            $dataData[$key][\'group\'] = $value;
            $dataData[$key][\'cell_data\'] = $cellData;
        }
        $filename = "比赛记录";
        Excel::create($filename,function($excel) use ($dataData){
            foreach ($dataData as $key=>$value){
                $cellData = $value[\'cell_data\'];
                $groupName = \'分组\'.$value[\'group\'];
                $excel->sheet($groupName, function($sheet) use ($cellData){
                    $sheet->rows($cellData);
                });
            }
        })->export(\'xls\');
    }

 

分类:

技术点:

相关文章: