您现在的位置是:首页 > 技术分享

TP5之PHPExcel导出(简单处理)
wangzhen2018-03-06431人围观


    Tp5之PHPExcel导出

    /** 前台按钮传过来的参数 **/

    $exportExcel = isset($_GET['exportExcel']) ? $_GET['exportExcel'] : '';


    /** excel导出按钮 调用导出方法 **/

    if(isset($exportExcel) && $exportExcel != ''){

            $objresult = $user->loadUserlist($where, $order);

            $this->exportExcel($objresult);

    }

    /** 执行导出方法 **/

    public function exportExcel($obj){

            $objcount = count($obj);

            $path = dirname(__FILE__); //找到当前脚本所在路径

            

            vendor('PHPExcel.PHPExcel.Classes.PHPExcel');    //手动引入excel文件

            vendor('PHPExcel.PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');//引入IOFactory.php文件里面的PHPExcel_IOFactory这个类

            $objPHPExcel = new \PHPExcel();

            

            //设置导出项

            $tabarr = array(

                        "用户名" => "username",

                        "手机" => "phone",

                        "邮箱" => "email",

                );

            

            foreach ($tabarr as $t_k => $t_v){

                $tableheader[] = $t_k;

                $theader[] = $t_v;

            }

            

            //excel表格式

            $letter = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR');

            

            $sum = count($tableheader) + 1;   //列数

            $num = ceil($sum/count($letter));   //循环次数

            $ci = 0;

            for($j = 0; $j < $num; $j++){

                if($j == 0){

                    for($i = 0;$i < count($letter); $i++){

                        $arr[] = $letter[$i];

                        $ci++;

                        if($ci == $sum){

                            break;

                        }

                    }

                }else{

                    for($i = 0;$i < count($letter); $i++){

                        $arr[] = $letter[$j-1] . $letter[$i];

                        $ci++;

                        if ($ci == $sum){

                            break;

                        }

                    }

                }

            }

            

            $dataArray = array();

            foreach ($obj as $p_v){

    $dataArray[] = (array)$p_v;

    }

                    

            $data = $dataArray; //导出的数据

                    

            for($i = 0;$i < count($tableheader); $i++){ 

                $objPHPExcel->getActiveSheet()->setCellValue("$letter[$i]1", $tableheader[$i]);       

                    

                $objPHPExcel->getActiveSheet()->getStyle("$letter[$i]1")->getAlignment()->setVertical(\PHPExcel_Style_Alignment :: VERTICAL_CENTER);

         $objPHPExcel->getActiveSheet()->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment :: HORIZONTAL_CENTER);

            }

            

            $objPHPExcel->getActiveSheet()->FreezePane("A2");

            $objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(25);//设置默认高度;

            

            //填充表格信息

            for($i = 2; $i <= count($data) + 1; $i++){

            $objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(25);//设置默认高度;

                for($j = 0; $j <= count($theader)-1; $j++){

                    //输出数据

                    $cellValue = $data[$i - 2][$theader[$j]];

                    $objPHPExcel->getActiveSheet()->setCellValue("$letter[$j]$i", $cellValue);


                    $objPHPExcel->getActiveSheet()->setCellValueExplicit("$letter[$j]$i", $cellValue, \PHPExcel_Cell_DataType::TYPE_STRING);


                    // 添加换行

    $objPHPExcel->getActiveSheet()->getStyle("$letter[$j]$i")->getAlignment()->setWrapText(true);

                    //单元格宽度

    $objPHPExcel->getActiveSheet()->getColumnDimension("$letter[$j]")->setWidth(16);              

                    $objPHPExcel->getActiveSheet()->getStyle("$letter[$j]1")->getAlignment()->setVertical(\PHPExcel_Style_Alignment :: VERTICAL_CENTER);

    $objPHPExcel->getActiveSheet()->getStyle("$letter[$j]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment :: HORIZONTAL_CENTER);

                }

            }

            

            //创建Excel输入对象

            $write = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

            ob_end_clean();//清除缓冲区,避免乱码 

            header("Content-type: application/vnd.ms-excel;charset=utf-8");

            header("Content-Type: application/force-download");  

            header("Content-Type: application/octet-stream");  

            header("Content-Type: application/download");  

            header('Content-Disposition:inline;filename= '. '用户列表' .'.xlsx'); 

            header("Content-Transfer-Encoding: binary");  

            header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  

            header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  

            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");  

            header("Pragma: no-cache");  


            $write->save('php://output');

        }


        /**

         * 设置单元格默认样式,居中

         * @param $position 单元格位置:如"A1"

         */

        function setDefaultStyle($position){

            $objPHPExcel->getActiveSheet()->getStyle($position)->getAlignment()->setVertical(\PHPExcel_Style_Alignment :: VERTICAL_CENTER);

    $objPHPExcel->getActiveSheet()->getStyle($position)->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment :: HORIZONTAL_CENTER);               

        }


文章评论