当前位置 : 主页 > 网络编程 > PHP >

PHPExcel 贴入生成的二维码.php

来源:互联网 收集:自由互联 发布时间:2021-06-28
PHPExcel 贴入生成的二维码.php public static function exportCards() { set_time_limit(300); // 设置最大执行时间 $output=[]; // 设置存放数据的空数组 $data = AppExtendCard::where(['is_print'=0])-select(); // 查询数据
PHPExcel 贴入生成的二维码.php
public static function exportCards() {
        set_time_limit(300);                                      // 设置最大执行时间
        $output=[];                                               // 设置存放数据的空数组
        $data = AppExtendCard::where(['is_print'=>0])->select();  // 查询数据
        if(empty($data)) return FALSE;                               
        $titles = [                                               // 设置导出数据的表头
            'code'  =>'礼品卡号',
            'amount'=>'金额',
            'expire_time'=>'到期时间',
            'card_qr'  =>'二维码'
        ];
        array_push($output,$titles);                              // 压入到空数组中
        if($data instanceof Collection) {                          
            $data = $data->toArray();                             // 把查询的结果转换成数组  注意  TP5 框架BUG  
        }
        $tmp=[];                                                  // 准备一个空数组 用来存放每一行数据
        foreach($data as $item) {                                 // 遍历查询出的数据
            foreach ($titles as $key=>$val) {                     
                if(isset($item[$key])){    
                    $tmp['casts'][$key]=$item[$key];              // 拿到表头中指定的字段的数据
                }else{
                    $tmp['casts'][$key] = $item['code'];          // 如果是二维码字段就放入想要生成二维码的内容
                }
            }
            array_push($output,$tmp['casts']);                    // 压入到存放数据的数组中
        }
        $objPHPExcel = new PHPExcel();                            // 实例化表格类
        $qrCode = new QrCode();                                   // 实例化二维码类
        $objSheet = $objPHPExcel->getActiveSheet();               // 返回当前活动的对象
        $objSheet->getDefaultRowDimension()->setRowHeight(50);
        list ($startColumn, $startRow) = PHPExcel_Cell::coordinateFromString('A1');  //获取操作开始的坐标
        $objSheet->setTitle('礼品卡');                             // 设置表头
        //遍历并写入数据 拿到对应的关系
        foreach ($output as $value) {
            $currentColumn = $startColumn;
            foreach ($value as $key=>$val) {
                if($key=='card_qr') {                            // 判断是不是写二维码
                    if($startRow<=1) {                           // 第一行写表头
                        $objSheet->getCell($currentColumn . $startRow)->setValue($val);
                    }else{
                        $objDrawing = new \PHPExcel_Worksheet_MemoryDrawing();  // 实例化一个 PHPExcel 中的类
                        $objDrawing->setWidth(50);                              // 设置宽和高
                        $objDrawing->setHeight(50);
                        $qrCode->setText($val)->setSize(50)->setPadding(10)->setErrorCorrection('high')->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
                            ->setImageType(QrCode::IMAGE_TYPE_PNG);            // 生成一个二维码
                        ob_start();                                            // 开启缓存   用于读取二维码
                        $qrCode->render();                                     // 读取二维码
                          $a = ob_get_contents();                              // 拿到缓存中的二维码信息
                        ob_clean();                                            // 清楚缓存
                        $objDrawing->setCoordinates($currentColumn . $startRow);// 设置二维码开始画入得位置
                        $objDrawing->setImageResource(imagecreatefromstring($a));// 写入excel   注意:Excel 中只能写入本地图片或者是GD生成的图片
                        $objDrawing->setWorksheet($objSheet);                   // 写入活动的表格中
                    }
                }else{
                    $objSheet->getCell($currentColumn . $startRow)->setValue($val);    // 写入不是二维码的其他数据
                }
                ++$currentColumn;
            }
            ++$startRow;
        }
        $objWrite = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');       // 按指定格式创建表格
        $outputFileName = '礼品卡.xls';                                                // 表格的名字
        ob_end_clean();
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'.$outputFileName.'"');
        header('Cache-Control: max-age=0');
        $objWrite->save( 'php://output');
        return TRUE;
    }
网友评论