ThinkPHP3.2利用PHPExcel导出Excel

最近做了一个关于微信投票的PHP项目,里面有个功能要求能导出选手信息生成Excel表格。于是,我采用PHPExcel类库集成到thinkphp3.2框架来实现这个功能。

第一步,先到PHPExcel官网下载PHPExcel的类库文件。各位可以点击这里到PHPExcel官网

解压目录如下图:
这里写图片描述

打开Classes文件夹,复制PHPExcel文件夹和PHPExcel.php到项目所在的ThinkPHP的Library/Org/Util/目录下。

这里写图片描述

这里写图片描述

第二步,根据PHPExcel的API文档和需求,写导出Excel的后台代码。

    /*
     * 导出成Excel表格
     */
    public function exportExcel(){
        //根据投票ID获取选手资料
        $vote_id = $_GET['vote_id'];
        $select['id'] = $_GET['vote_id'];
        $vote = D('vote');
        $result = $vote->where($select)->find();
        $filename =$result['theme'].date('Ymd',time()).'.xlsx';
        $sheetname = $result['theme'];
        //查询选手数据,根据排名先后排序
        $sql = 'SELECT NAME,info,vote_count,rank,img FROM
                 (SELECT A.*, @rownum:=@rownum+1 AS rownum, 
                 IF(@vote_count=vote_count,@rank,@rank:=@rownum)
                 AS rank,@vote_count:=vote_count FROM
                 ='.$vote_id .' GROUP BY id ORDER BY 
                 vote_count DESC) A,
                )B) AS result ';
        $model = new \Think\Model();
        $data = $model->query($sql);
        //引入phpEscel类,因为phpExcel没有命名空间,因此要使用import这样的方法
        import('Org.Util.PHPExcel');  
        //实例化phpExcel类
        $objPHPExcel = new \PHPExcel();
        //设置文本对齐方式
        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objActSheet=$objPHPExcel->getActiveSheet();
        //设置当前sheet的值
        $objPHPExcel->getActiveSheet()->setTitle("$sheetname");
        $letter = array('A','B','C','D','E');
        //设置表头数据
        $tableheader = array('姓名','信息','总票数','排名','图片');
        //填充表格表头
        for($i = 0; $i < count($tableheader); $i++){
            $objPHPExcel->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]");
        }
        //填充数据
        $j = 1;
        for($i = 0;$i < count($data); $i++){
            $j = $j +1; 
            for($row = 0; $row < count($data[$i]);$row++){
            /*设置表格宽度*/
            $objActSheet->getColumnDimension("$letter[$row]$j")->setWidth(50);
            /*设置表格高度*/
            $objPHPExcel->getActiveSheet()->getRowDimension($j)->setRowHeight(50);
            switch($row){
                case 0: $value = $data[$i]['name'];
                        //设置表格的值
                        $objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
                    break;
                case 1: $value = $data[$i]['info'];
                        $objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
                    break;
                case 2: $value = $data[$i]['vote_count'];
                        $objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
                    break;
                case 3: $value = $data[$i]['rank'];
                        $objPHPExcel->getActiveSheet()->setCellValue("$letter[$row]$j", "$value");
                    break;
                case 4:  //实例化excel图片处理类
                        $objDrawing = new \PHPExcel_Worksheet_Drawing();
                        $imgURL = $data[$i]['img'];
                        $str =  str_replace('Vote/index.php',"$imgURL",$_SERVER['SCRIPT_FILENAME']);
                        $objDrawing ->setPath($str);
                        $objDrawing->setHeight(50);
                        $objDrawing->setCoordinates("$letter[$row]$j");  //插入图片
                        $objDrawing->getShadow()->setVisible(true);
                        $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
                default;
                }  
            }
        }
        //保存
        import('Org.Util.PHPExcel.IOFactory');
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
        //设置下载类型
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
        header("Content-Type:application/force-download");
        header("Content-Type:application/vnd.ms-execl");
        header("Content-Type:application/octet-stream");
        header("Content-Type:application/download");                
        header('ContentDisposition:attachment;filename="'.$filename.'"');  //设置下载文件名
        header("Content-Transfer-Encoding:binary");
        $objWriter ->save('php://output'); //导出文件
    }

效果如下:

这里写图片描述这里写图片描述

更多的关于PHPExcel的用法在PHPExcelAPI文档查看,当然这是官网的英文版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值