ThinkPHP3.2利用phpExcel导出excel文件

浏览:7204 发布日期:2017/11/04 分类:技术分享 关键字: phpExcel thinkphp3.2
最近在开发过程中用到了导出excel文件,虽然网上也有很多交流贴,但以此记录下自己的学习历程。


一、 下载phpExcel,并放在框架目录下。目录位置如下(excel文件夹自己建的。)


二、在新建好的excel文件夹下创建ExcelToArray.class.php类。
注意这里类的名字不能省去.class。代码如下<?php

class ExcelToArrary {
    public function __construct() {
         /*导入phpExcel核心类  注意 :你的路径跟我不一样就不能直接复制*/
        include_once('PHPExcel.php');
    }
    /* 导出excel函数*/
    public function push($data,$name='Excel'){
        error_reporting(E_ALL);
        date_default_timezone_set('Europe/London');
        $objPHPExcel = new PHPExcel();



        //以下是一些设置 ,什么作者 标题啊之类的
        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置所有格居中显示
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);//单个单元格居左
        $objPHPExcel->getActiveSheet()->getStyle('A2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);//单个单元格居左
        $objPHPExcel->getActiveSheet()->getColumnDimension("A")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("C")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("D")->setAutoSize(true);//设置单元格自动宽度
        //$objPHPExcel->getActiveSheet()->getColumnDimension("E")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("F")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("G")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("H")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("I")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("J")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("K")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("L")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("M")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("N")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("O")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("P")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("Q")->setAutoSize(true);//设置单元格自动宽度
        $objPHPExcel->getActiveSheet()->getColumnDimension("R")->setAutoSize(true);//设置单元格自动宽度
        /*$objPHPExcel->getProperties()->setCreator("admin")
        ->setLastModifiedBy("admin")
        ->setTitle("启扬文华传媒")
        ->setSubject("数据EXCEL导出")
        ->setDescription("备份数据")
        ->setKeywords("AAA")
        ->setCategory("result file");*/

        /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
        foreach($data as $k => $v){
            $num=$k+5;
        if($v['a_zt'] >=1){$finish  ="已完成";}else{$finish  ="未完成";}
        if($v['a_zt'] >=2){$audit  ="已审核";}else{$audit ="未审核";}
        if($v['a_zb'] =1){$zb  ="中标";}else{$zb  ="流标";}
        if($v['a_btime'] == null){$btime="未退单";}else{$btime=$v['a_btime'];}
        if($v['a_itime'] == null){$itime="未接单";}else{$itime=$v['a_itime'];}
        if($v['a_fitme'] == null){$ftime="未上传";}else{$ftime=$v['a_fitme'];}
        if($v['a_bz'] == null){$bz="暂无";}else{$bz=$v['a_bz'];}
        $objPHPExcel->getActiveSheet()->mergeCells('H4:K4');//合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('H'.$num.':K'.$num);//合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('A1:B1');//合并单元格
        $objPHPExcel->getActiveSheet()->mergeCells('A2:D2');//合并单元格

        $objPHPExcel->setActiveSheetIndex(0)
            //Excel的第A列,id是你查出数组的键值,下面以此类推
            //先设置标题行
            ->setCellValue('A1', '操作者:'.$_SESSION["adminuser"])
            ->setCellValue('A2', '导出时间:'.date("Y-m-d H:i:s",time()))
            ->setCellValue('A4', '设计师')
            ->setCellValue('B4', '序号')
            ->setCellValue('C4', '退单时间')
            ->setCellValue('D4', '接单时间')
            ->setCellValue('E4', '单号')
            ->setCellValue('F4', '要求')
            ->setCellValue('G4', '客户姓名')
            ->setCellValue('H4', '客户联系方式')
            ->setCellValue('L4', '设计时间')
            ->setCellValue('M4', '完成情况')
            ->setCellValue('N4', '审核状态')
            ->setCellValue('O4', '中标/流标')
            ->setCellValue('P4', '上传日期')
            ->setCellValue('Q4', '备注')
            //填充数据
            ->setCellValue('A'.$num, $v['a_user'])
            ->setCellValue('B'.$num, $v['a_xh'])
            ->setCellValue('C'.$num, $btime)
            ->setCellValue('D'.$num, $itime)
            ->setCellValue('E'.$num, $v['a_dh']."\t")
            ->setCellValue('F'.$num, $v['a_content'])
            ->setCellValue('G'.$num, $v['a_khname'])
            ->setCellValue('H'.$num, "手机".$v['a_khphone'])
            ->setCellValue('I'.$num, "QQ".$v['a_khqq'])
            ->setCellValue('J'.$num, "微信".$v['a_khwx'])
            ->setCellValue('K'.$num, "旺旺".$v['a_khww'])
            ->setCellValue('L'.$num, $v['a_dtime'])
            ->setCellValue('M'.$num, $finish)
            ->setCellValue('N'.$num, $audit) //审核状态
            ->setCellValue('O'.$num, $zb)//中标/流标
            ->setCellValue('P'.$num, $ftime)
            ->setCellValue('Q'.$num, $bz);
        }
        $objPHPExcel->getActiveSheet()->setTitle('User');
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean();//清楚缓存区,解决乱码问题
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$name.'.xls"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }
}
三、控制器中的用法
在这里因为ExcelToArray.class.php类没有使用命名空间,所有引入时用import(),而不是Vendor(),这是个坑。代码如下。//导出execl文件
            if($_GET['execlId']){//判断是否为导出操作
                $name='启扬传媒任务导出表'.date("YmdHms",time());  //生成的Excel文件文件名
                import("Vendor.excel.ExcelToArrary");   //引入ExcelToArrary
                $res=new \ExcelToArrary();
                $res->push($list,$name);//$list是查询出的数据库内容
                }
四、html界面。这里随便啦,只要调用对用控制器和方法就行<input name="" type="button" class="btn" onclick=execl() value="导出EXECL文件"/>
//js
function execl(){
    window.location.href="__APP__/Home/Index/jsbz_list_finish/execlId/1";
}
导出效果

以上就是全部代码了。这里有个问题要说明一下,如果导出数据时有很长的数字可以在数字导出时加上 "\t" 那导出来显示完整->setCellValue('E'.$num, $v['a_dh']."\t")自己也是小白一枚,有什么问题希望大伙多多指教!
phpexcel源码百度云:http://pan.baidu.com/s/1nuEvJz7
最佳答案
评论( 相关
后面还有条评论,点击查看>>