PHP 导出Excel三种方式 阿星小栈

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‘);
    }

原文地址:https://www.cnblogs.com/dereckbu/p/9646574.html

时间: 2024-08-09 19:14:39

PHP 导出Excel三种方式 阿星小栈的相关文章

C#中datatable导出excel(三种方法)

方法一:(拷贝直接可以使用,适合大批量资料, 上万笔)Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();SaveFileDialog savefiledialog = new SaveFileDialog();System.Reflection.Missing miss = System.Reflection.Missing.Value;ap

C#导入Excel 三种方式,64位机器不支持第一种

本文来源于网络搜集,如有不合适之处,请留言. 第一种方式: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作. string connExcel = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=Excel 8.0"; 第二种

三种方式获取小程序页面跳转并传参

方法一.可以将数据保存在app.js文件中,因为app.js的数据是全局可见的,但是如果所有全局变量都放到app.js中,会导致该文件很臃肿 方法二.通过官方文档可知在页面onLoad生命周期的参数中获取打开当前页面路径中的参数.那么可以通过 wx.navigateTo()传递参数,跳转到官方文档. 数据可以传递一个或多个,也可传递数组和json对象 注意:因为url的长度有限,对象太长,结果发现拼接在URL之后不完整,导致之后解析不出来,所以路由传参对象时要注意,传参的对象不能太长. eg:

oracle数据的导入导出(两种方法三种方式)

大概了解数据库中数据的导入导出.在oracle中,导入导出数据的方法有两种,一种是使用cmd命令行的形式导入导出数据,另一种是使用PL/SQL工具导入导出数据. 1,使用cmd命令行导入导出数据 1.1整库导出 整库导出:exp 管理员账号/密码 full=y;//参数full表示整库导出.导出后会在当前目录下生成一个EXPDAT.DMP的文件,此文件为备份文件.如果想导出数据到指定位置,并且取个名字,需要添加file参数.例如:exp system/123456 file= C:\person

【整理】Linux下中文检索引擎coreseek4安装,以及PHP使用sphinx的三种方式(sphinxapi,sphinx的php扩展,SphinxSe作为mysql存储引擎)

一,软件准备 coreseek4.1 (包含coreseek测试版和mmseg最新版本,以及测试数据包[内置中文分词与搜索.单字切分.mysql数据源.python数据源.RT实时索引等测试配置]) Mysql源码包 (必须选择与你已安装mysql的版本一致) 为了避免安装中出现依赖包缺失,你需要打一句鸡血: yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel exp

javascript函数命名的三种方式及区别

1, function fn(val1,val2) { alert(val1+val2); } fn(1,2); 2, var fn=function() { alert(val1+val2); } fn(1,2); 3, var fn=new Function("alert(val1+val2)"); fn(1,2); 上面三种方式逻辑上是等价的,但是还是有点小区别: 区别一:例一中的函数会在代码执行以前被加载到作用域中,而例二则是在代码执行到那一行的时候才会有定义: 区别二:函数声

iOS开发 跳转场景的三种方式

假设A跳转到B,三种方法: 1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任何代码,在A上点击Button就会跳转到B 2. 按住ctrl键,拖动A上的View Controller到B上,弹出菜单,选择Modal,两个场景间自动添加连接线和图标,选中该图标,打开Storyboard Segue,identifier输入一个标识符,这里以”aaaa”为例.A里需要跳转时,执行下面的代码: 1 [self performSegueWithId

JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert("ok");}); live(type,[data],fn) 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的 $("a").live("click",function(){alert("ok");}); de

在Tomcat配置JNDI数据源的三种方式

在Tomcat配置JNDI数据源的三种方式 分类: java进阶2012-07-01 10:24 18328人阅读 评论(0) 收藏 举报 tomcatjdbcweblogicmysqlbean测试 目录(?)[+] 在我过去工作的过程中,开发用服务器一般都是Tomcat 数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean 然后在部署时再修改JNDI配置 我猜是因为Tomcat的配置需要改配置文件 不像JBoss,Weblogic等服务器在