ThinkPHP5 + PHPExcel 批量导入导出(部分注意事项)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37682202/article/details/83751476

在网上下载PHPExcel资源包,置于vender文件夹之下,也可以点击我的网盘分享:https://pan.baidu.com/s/1v2_oMMSvwTcebG9F3YQJqQ

先说两个注意事项:

1、部分php7环境的朋友可能在导出的时候不能执行:$objWriter->save('php://output') 语句(我就是这种情况),此时将PHPExcel插件中(PHPExcel/PHPExcel/Calculation/Functions.php中576行的break注释掉就是)

2、关于日期的处理,PHPExcel中处理日期的方式如下:

$op_Time = gmdate("Y-m-d", \PHPExcel_Shared_Date::ExcelToPHP($objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue())); 
$data['op_Time'] = strtotime($op_Time);

 /*
     * 代理商信息导出
     */
    public function downAgent()
    {
        //这几个字段是筛选导出
        if(input('us_truename')){ //姓名
            $map['us_truename'] = array('like','%'.input('us_truename').'%');
        }
        if(input('ag_idcard')){ //身份证号码
            $map['ag_idcard'] = input('ag_idcard');
        }
        if(input('ag_cityid3') != ''){  //代理地区
            $map['ag_cityid'] = input('ag_cityid3');
        }elseif(input('ag_cityid2') != ''){
            $map['ag_cityid'] = input('ag_cityid2');
        }elseif(input('ag_cityid1') != ''){
            $map['ag_cityid'] = input('ag_cityid1');
        }
        $map['us_role'] = 2; //代理商
        $map['us_status'] = array('gt','-1');
        $info = Db::table('tb_users')->field('us_truename,ag_phone_number,ag_idcard,ag_address,ci_name,ag_company_addess,ag_ent_name,ag_offline_num,ag_tax_payment,ag_billing_address,ag_billing_phone,ag_billing_bank,ag_billing_number,ag_info')->join('tb_agent','tb_agent.ag_usid=tb_users.us_id')->join('tb_city','tb_city.ci_id=tb_agent.ag_cityid')->where($map)->select();
        //导出数据
        $file_name = date('Y-m-d_His').'.xls';
        ob_clean();
        vendor("PHPExcel.PHPExcel");  //引入文件
        $objPHPExcel = new \PHPExcel();
        $objPHPExcel->getActiveSheet()->SetCellValue('A1', '姓名');
        $objPHPExcel->getActiveSheet()->SetCellValue('B1', '电话');
        $objPHPExcel->getActiveSheet()->SetCellValue('C1', '身份证号码');
        $objPHPExcel->getActiveSheet()->SetCellValue('D1', '身份证地址');
        $objPHPExcel->getActiveSheet()->SetCellValue('E1', '代理地区');
        $objPHPExcel->getActiveSheet()->SetCellValue('F1', '办公地点');
        $objPHPExcel->getActiveSheet()->SetCellValue('G1', '线下人员人数');
        $objPHPExcel->getActiveSheet()->SetCellValue('H1', '企业名称');
        $objPHPExcel->getActiveSheet()->SetCellValue('I1', '纳税人识别号');
        $objPHPExcel->getActiveSheet()->SetCellValue('J1', '开票地址');
        $objPHPExcel->getActiveSheet()->SetCellValue('K1', '开票电话');
        $objPHPExcel->getActiveSheet()->SetCellValue('L1', '开票银行');
        $objPHPExcel->getActiveSheet()->SetCellValue('M1', '开票账号');
        $objPHPExcel->getActiveSheet()->SetCellValue('N1', '征信(备注)');
        $i = 2;
        foreach($info as $key => $value){
            $objPHPExcel->getActiveSheet()->SetCellValue('A'.$i,''.$value['us_truename']);
            $objPHPExcel->getActiveSheet()->SetCellValue('B'.$i,' '.$value['ag_phone_number']);
            $objPHPExcel->getActiveSheet()->SetCellValue('C'.$i,' '.$value['ag_idcard']);
            $objPHPExcel->getActiveSheet()->SetCellValue('D'.$i,''.$value['ag_address']);
            $objPHPExcel->getActiveSheet()->SetCellValue('E'.$i,''.$value['ci_name']);
            $objPHPExcel->getActiveSheet()->SetCellValue('F'.$i,''.$value['ag_company_addess']);
            $objPHPExcel->getActiveSheet()->SetCellValue('G'.$i,''.$value['ag_ent_name']);
            $objPHPExcel->getActiveSheet()->SetCellValue('H'.$i,''.$value['ag_offline_num']);
            $objPHPExcel->getActiveSheet()->SetCellValue('I'.$i,''.$value['ag_tax_payment']);
            $objPHPExcel->getActiveSheet()->SetCellValue('J'.$i,''.$value['ag_billing_address']);
            $objPHPExcel->getActiveSheet()->SetCellValue('K'.$i,' '.$value['ag_billing_phone']);
            $objPHPExcel->getActiveSheet()->SetCellValue('L'.$i,''.$value['ag_billing_bank']);
            $objPHPExcel->getActiveSheet()->SetCellValue('M'.$i,' '.$value['ag_billing_number']);
            $objPHPExcel->getActiveSheet()->SetCellValue('N'.$i,''.$value['ag_info']);
            $i++;
        }
       
        $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$file_name );
        header('Cache-Control: max-age=0');
        //输出指定目录
        $objWriter->save('php://output');
        die;
    }
    
    /*
     * 批量导入代理商详情
     */
    public function upAgent(){
        if(request()->ispost()){
            // 获取表单上传文件
            $file = request()->file('agent_file');
            if(empty($file)){
                $this->error('请选择上传文件!');
            }else{
                //文件位置
                $moveUrl = ROOT_PATH.'public'.DS.'upload/files/agent/';
                //移动文件
                $info = $file->validate(['size'=>12428800,'ext'=>'xls,xlsx'])->rule('uniqid')->move($moveUrl);
                if($info){
                    // 成功上传后 获取上传信息
                    $file_name = $moveUrl.DS.$info->getFilename();
                    //导入
                    vendor("PHPExcel.PHPExcel");
                    $extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));//判断导入表格后缀格式
                    if($extension == 'xlsx') {
                        $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
                        $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');
                    }else if($extension == 'xls'){
                        $objReader =\PHPExcel_IOFactory::createReader('Excel5');
                        $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');
                    }
                    $sheet = $objPHPExcel->getSheet(0);
                    $highestRow = $sheet->getHighestRow();//取得总行数
                    $highestColumn = $sheet->getHighestColumn(); //取得总列数
                    $num = 0;
                    for($i = 2; $i <= $highestRow; $i++){
                        $map['us_truename'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
                        $map['us_name'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();
                        $map['us_number'] = onlyNumber();
                        $map['us_password'] = sha1(md5('123456'));
                        $map['us_time'] = time();
                        $map['us_role'] = 2; //代理商
                        $uid = Db::name('users')->insertGetId($map);
                        if($uid){
                            $data['ag_usid'] = $uid;
                            $data['ag_phone_number'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
                            $data['ag_idcard'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
                            $data['ag_address'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
                            $where['ci_name'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
                            $cityInfo = Db::name('city')->field('ci_id')->where($where)->find();
                            $data['ag_cityid'] = $cityInfo['ci_id'] ? $cityInfo['ci_id'] : 0;
                            $dataU['us_cityId'] = $cityInfo['ci_id'] ? $cityInfo['ci_id'] : 0;
                            @Db::name('users')->where('us_id ='.$uid)->update($dataU);
                            $data['ag_company_addess'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
                            $data['ag_offline_num'] = $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
                            $data['ag_ent_name'] = $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
                            $data['ag_tax_payment'] = $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
                            $data['ag_billing_address'] = $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
                            $data['ag_billing_phone'] = $objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue();
                            $data['ag_billing_bank'] = $objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue();
                            $data['ag_billing_number'] = $objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();
                            $data['ag_info'] = $objPHPExcel->getActiveSheet()->getCell("N".$i)->getValue();
                            $info = Db::name('agent')->insert($data);
                            if($info){
                                $num++;
                            }else{
                                break;
                            }
                        }else{
                            break;
                        }
                    }
                    //删除excel文件
                    unlink($file_name);
                    if($num > 0){
                        $this->success('导入成功'.$num.'条数据',url('agent/agentList'),3); 
                    }else{
                        $this->error('导入第'.$num.'条失败'); 
                    }
                }else{
                    // 上传失败获取错误信息
                    $this->error($file->getError());
                }
            }            
        }
    }


 

猜你喜欢

转载自blog.csdn.net/qq_37682202/article/details/83751476