tp5 PHPExcle 導出多商品訂單

tp5 PHPExcle 導出多商品訂單

例子
在這裏插入圖片描述
代碼:


public function export(){
        if ($this->request->isPost()) {
            set_time_limit(0);
            $search = $this->request->post('search');
            $ids = $this->request->post('ids');
            $filter = $this->request->post('filter');
            $op = $this->request->post('op');
            $columns = $this->request->post('columns');
            $excel = new \PHPExcel();
            $excel->getProperties()
                ->setCreator("FastAdmin")
                ->setLastModifiedBy("FastAdmin")
                ->setTitle("標題")
                ->setSubject("Subject");
            $excel->getDefaultStyle()->getFont()->setName('Microsoft Yahei');
            $excel->getDefaultStyle()->getFont()->setSize(12);
            $this->sharedStyle = new \PHPExcel_Style();
            $this->sharedStyle->applyFromArray(
                array(
                    'fill'      => array(
                        'type'  => \PHPExcel_Style_Fill::FILL_SOLID,
                        'color' => array('rgb' => '000000')
                    ),
                    'font'      => array(
                        'color' => array('rgb' => "000000"),
                    ),
                    'alignment' => array(
                        'vertical'   => \PHPExcel_Style_Alignment::VERTICAL_CENTER,
                        'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
                        'indent'     => 1
                    ),
                    'borders'   => array(
                        'allborders' => array('style' => \PHPExcel_Style_Border::BORDER_THIN),
                    )
                ));

            $worksheet = $excel->setActiveSheetIndex(0);
            $worksheet->setTitle('標題');

            $this->request->get(['search' => $search, 'ids' => $ids, 'filter' => $filter, 'op' => $op]);
            list($where, $sort, $order, $offset, $limit) = $this->buildparams();

            $list=Db::name('totalorder')
                ->alias('o')
                 ->join('users users','o.user_id=users.id','LEFT')
                ->join('orders d','o.id=d.order_id','LEFT')
                ->join('goods g','d.good_id=g.id','LEFT')
                ->field('o.*,d.goods_id,d.num as nums,d.price')

                ->where($where)
                ->select();

            if (empty($list)){
                $this->error('當前沒有可以導出的訂單','/admin/orders/orders?ref=addtabs');
            }
            $res=[];
            $pay_style=[1=>'LinePay'];
            $goods_info=[];
            foreach ($list as $k => $v) {
                $res[$v['order_number']]['order_number'] = ' '.$v['order_number'];
                $res[$v['order_number']]['realname'] =$v['realname'];
                $res[$v['order_number']]['odd_numbers'] = ' '.$v['odd_numbers'];
                $res[$v['order_number']]['logistics'] =$v['logistics'];
                $res[$v['order_number']]['status'] = $this->model->getStatusList()[$v['status']];
                $res[$v['order_number']]['names'] = $v['names'];
                $res[$v['order_number']]['pay_style'] =$pay_style[$v['pay_style']];
                $res[$v['order_number']]['phone'] = $v['phone'];
                $res[$v['order_number']]['total_price'] = $v['total_price'];
                $res[$v['order_number']]['address'] = $v['address'];
                $res[$v['order_number']]['goods_price'] = $v['price'];
                $res[$v['order_number']]['payment_time'] = date('Y-m-d H:i:s',$v['pay_time']);
                $res[$v['order_number']]['createtime'] = date('Y-m-d H:i:s',$v['createtime']);
                $res[$v['order_number']]['goods'][] = '商品名稱:'.$v['goodsname'].'  商品單價:'.$v['price'].'  商品數量:'.$v['nums'];
                $goods_info[]='商品名稱:'.$goods['goodsname'].'  商品單價:'.$v['price'].'  商品數量:'.$v['nums'];
            }
            $res=array_values($res);

            $data = [];
            #表頭
            $data1 = ['訂單編號','用戶','訂單金額', '購買商品', '訂單狀態', '支付方式', '下單時間','支付時間','收貨人', '聯繫方式','收貨地址','物流號','物流公司',
            ];
            #導出內容組合
            foreach ($res as $kk=>$vv){
            
                $data[$kk+1]['order_number']=$vv['order_number'];
                $data[$kk+1]['realname']=$vv['realname'];
                $data[$kk+1]['names']=$vv['names'];
                $data[$kk+1]['phone']=$vv['phone'];
                $data[$kk+1]['address']=$vv['address'];
                $data[$kk+1]['total_money']=$vv['total_price'];
                $data[$kk+1]['goods']=$vv['goods'];
                $data[$kk+1]['status']=$vv['status'];


                $data[$kk+1]['pay_style']=$vv['pay_style'];
                $data[$kk+1]['createtime']=$vv['createtime'];
                $data[$kk+1]['payment_time']=$vv['payment_time'];
                $data[$kk+1]['odd_numbers']=$vv['odd_numbers'];
                $data[$kk+1]['logistics']=$vv['logistics'];

            }

            $this->exportOrderExcel2("訂單列表",$data1,$data);
            $this->success('導出成功');
        }
    }

function exportOrderExcel2($title, $cellName, $data) {
        //引入核心文件
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel = new \PHPExcel();
        //定義配置
        $topNumber = 2;//表頭有幾行佔用
        $xlsTitle = iconv('utf-8', 'gb2312', $title);//文件名稱
        $fileName = $title.date('_YmdHis');//文件名稱
        $cellKey = 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','AS','AT','AU','AV','AW','AX','AY','AZ'
        );

        $objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(20);//所有單元格(列)默認寬度

        //垂直居中
        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);

        //處理表頭標題
        $objPHPExcel->getActiveSheet()->mergeCells('A1:'.$cellKey[count($cellName)-1].'1');//合併單元格(如果要拆分單元格是需要先合併再拆分的,否則程序會報錯)
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1',$title);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);

        //處理表頭
        foreach ($cellName as $k=>$v)
        {
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellKey[$k].$topNumber, $v);//設置表頭數據
//            $objPHPExcel->getActiveSheet()->freezePane($cellKey[$k].($topNumber+1));//凍結窗口
//            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getFont()->setBold(true);//設置是否加粗
//            $objPHPExcel->getActiveSheet()->getStyle($cellKey[$k].$topNumber)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中
//            if($v[3] > 0)//大於0表示需要設置寬度
//            {
//                $objPHPExcel->getActiveSheet()->getColumnDimension($cellKey[$k])->setWidth($v[3]);//設置列寬度
//            }
        }

        //處理數據
        $start = $topNumber+1;
        $j = $topNumber+1;
        foreach ($data as $k=>$v)
        {
//            $j = $start;
            foreach ($v['goods'] as $k1=>$v1)
            {
                if($k1==0){
                    //計算初步當前單元格標識,以及 需要合併的單元格標識 A B C D E F G M
                    $end = $start+count($v['goods'])-1;
                    $objPHPExcel->getActiveSheet()->mergeCells("A".$start.':'."A".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("B".$start.':'."B".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("C".$start.':'."C".$end);
//                    $objPHPExcel->getActiveSheet()->mergeCells("D".$start.':'."D".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("E".$start.':'."E".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("F".$start.':'."F".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("G".$start.':'."G".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("H".$start.':'."H".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("I".$start.':'."I".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("J".$start.':'."J".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("K".$start.':'."K".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("L".$start.':'."L".$end);
                    $objPHPExcel->getActiveSheet()->mergeCells("M".$start.':'."M".$end);
//                    $objPHPExcel->getActiveSheet()->mergeCells("M".$start.':'."M".$end);

                    $objPHPExcel->getActiveSheet()->setCellValue("A".$start, $v['order_number']);
                    $objPHPExcel->getActiveSheet()->setCellValue("B".$start, $v['realname']);

                    $objPHPExcel->getActiveSheet()->setCellValue("C".$start, $v['total_money']);
                    $objPHPExcel->getActiveSheet()->setCellValue("E".$start, $v['status']);
                    $objPHPExcel->getActiveSheet()->setCellValue("F".$start, $v['pay_style']);
                    $objPHPExcel->getActiveSheet()->setCellValue("G".$start, $v['createtime']);
                    $objPHPExcel->getActiveSheet()->setCellValue("H".$start, $v['payment_time']);
                    $objPHPExcel->getActiveSheet()->setCellValue("I".$start, $v['names']);
                    $objPHPExcel->getActiveSheet()->setCellValue("J".$start, $v['phone']);
                    $objPHPExcel->getActiveSheet()->setCellValue("K".$start, $v['address']);
                    $objPHPExcel->getActiveSheet()->setCellValue("L".$start, $v['odd_numbers']);
                    $objPHPExcel->getActiveSheet()->setCellValue("M".$start, $v['logistics']);
                }

                $objPHPExcel->getActiveSheet()->setCellValue("D".$j, $v1);
              /*  $objPHPExcel->getActiveSheet()->setCellValue("I".$j, $v1['sku_title']);
                $objPHPExcel->getActiveSheet()->setCellValue("J".$j, $v1['skuid']);
                $objPHPExcel->getActiveSheet()->setCellValue("K".$j, $v1['sku_num']);
                $objPHPExcel->getActiveSheet()->setCellValue("L".$j, sprintf("%.2f",($v1['sku_activity_price']*$v1['sku_num'])));*/
                $j++;
            }

            $start += count($v['goods']);
        }

        //導出execl
        ob_end_clean();//防止亂碼
        header('pragma:public');
        header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
        header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }

引用

https://www.cnblogs.com/phpjinggege/p/9016162.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章