PHP Excel导出,遍历表头

场景,后台创建了问卷题目,前台用户答卷,需求是把这套卷子答题的人及问卷详情都导出来

我的数据,题目是一串json,用户填写的内容是一串json

$newArr = [];//最后表格内容的对应关系
        if($data){
            foreach ($data as $k => $v){
                $data[$k]['ADDTIME'] = date('Y-m-d H:i:s',strtotime($v['ADDTIME']));
                $data[$k]['pfrom'] = json_decode($v['QCONTENT'],true);
                $data[$k]['pj_content'] = json_decode($v['SUB_CONTENT'],true);
            }

            foreach ($data as $k => $v){
                $newArr[$k][] = $v['ADDTIME'];
                $newArr[$k][] = $v['CUSTOMER_CODE'];
                $newArr[$k][] = $v['CUSTOMER_NAME'];
                $newArr[$k][] = $v['PJ_NAME'];
                $newArr[$k][] = $v['PJ_MOBILE'];
                foreach ($v['pj_content']['con'] as $j => $h){
                    $newArr[$k][] = $h;
                }
            }
           $pfrom = $data[0]['pfrom']['con'];
        }

        $basePath = Yii::$app->basePath;
        require_once $basePath."/phpexcel/PHPExcel.php";
        require_once $basePath."/phpexcel/PHPExcel/IOFactory.php";
        require_once $basePath."/phpexcel/PHPExcel/Cell.php";
        require_once $basePath."/phpexcel/PHPExcel/Writer/Excel2007.php";
        require_once $basePath."/phpexcel/PHPExcel/Cell/DataType.php";

        ini_set("memory_limit","-1");
        ini_set('max_execution_time', 1200);
        ini_set ('memory_limit', '256M');
        date_default_timezone_set('Asia/Shanghai');

        $objPHPExcel = new \PHPExcel();
        $objPHPExcel->setActiveSheetIndex(0);
        if(!$pfrom){
            return false;
        }
        //自定义表头
        $consult = [];
        $pfrom = array_column($pfrom,'name');//题目
        $consult = array('填写时间','客户编号','客户名称','填写人姓名','联系方式');//固定字段
        $pfromname = array_merge($consult,$pfrom);//合在一起组合成表头

        $letter_all=[];
        $letter=['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'];
        // 通过标题字段生成excel字母 例如3个字段,生成A-C
        $item=0;
        foreach($pfromname as $k => $v){
            if($item==26){
                $item=0;
            }
            $n=ceil(($k+1)/26);
            if($n==1){
                array_push($letter_all,$letter[$item]);
            }else{
                $n=$n-2;
                array_push($letter_all,$letter[$n].$letter[$item]);
            }
            $item++;
        }


        foreach ($pfromname as $k => $v){
            $objPHPExcel->getActiveSheet()->setCellValue($letter_all[$k].'1', $v);
            $objPHPExcel->getActiveSheet()->getStyle($letter_all[$k].'1')->getFont()->setBold(true);//字体加粗
            // $PHPExcel->getActiveSheet()->getColumnDimension($letter_all[$k])->setAutoSize(true);//内容自适应
        }

        $index=0;
//        print_r($newArr);die;
        if($newArr){
            foreach ($newArr as $key => $value) {
                foreach ($value as $k => $v){
                    if(is_array($v)){
                      $v = json_encode($v,JSON_UNESCAPED_UNICODE);
                    }
                    $objPHPExcel->getActiveSheet()->setCellValueExplicit($letter_all[$k].($index+2), $v, \PHPExcel_Cell_DataType::TYPE_STRING);
                }
                $index++;
            }

        }
        $objPHPExcel->getActiveSheet()->setTitle('问卷详情');
        $objPHPExcel->setActiveSheetIndex(0);
        $filename="问卷详情.xls";
        //解决IE不兼容问题
        $userBrowser = $_SERVER['HTTP_USER_AGENT'];
        if(preg_match('/MSIE/i',$userBrowser)){
            $filename = urlencode($filename);

        }
        $filename = iconv('UTF-8','GBK//IGNORE',$filename);
        ob_end_clean();
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");
        header('Content-Disposition:inline;filename="'.$filename.'"');
        header("Content-Transfer-Encoding: binary");
        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");
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值