• tp5 Excel 批量导入


    //引入Excel公共类
    vendor("PHPExcel.Classes.PHPExcel");
    vendor('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
    vendor('PHPExcel.Classes.PHPExcel.Reader.Excel5');
    $objPHPExcel = new PHPExcel();
    $file = request()->file('filename');
    $info = $file->validate(['ext' => 'xlsx,xls,csv'])->move(ROOT_PATH . 'public' . DS . 'uploads/import');//上传验证后缀名,以及上传之后移动的地址
    if($info){
     $exclePath = $info->getSaveName();  //获取文件名
     $file_name = ROOT_PATH . 'public' . DS . 'uploads/import' . DS . $exclePath;   //上传文件的地址
     $objReader =PHPExcel_IOFactory::createReader('Excel5');
     $obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8');  //加载文件内容,编码utf-8
     $excel_array=$obj_PHPExcel->getsheet(0)->toArray();   //转换为数组格式
     array_shift($excel_array);  //删除第一个数组(标题);
     $datas = [];
     $data_errors = [];
    //处理Excel导入时数据为空的情况
     foreach($excel_array as $k=>$v) {
     if(!empty($v[0] || $v[1] || $v[2])){
     $excel_list[] = $v;
     }
        }
     $cn=count($excel_list);
    //循环遍历,组装数据进行入库
     foreach ($excel_list as $k=>$v){
     if(!empty($v[0]) && !empty($v[1])){
     $wh['job_number'] = $v[0];
     $wh['is_deleted'] = '1';
     $res_info=db('member')->where($wh)->count();
     if($res_info ==0){
     $data=array(
     'job_number'=>$v[0],
     'user_name'=>$v[1],
     'department'=>$v[2],
     'create_id' =>$admin_id,
     'create_time'=>date('Y-m-d H:i:s'),
     );
     $datas[] = $data;
     }
          }else{
     $error_data=array(
     'job_number'=>$v[0],
     'user_name'=>$v[1],
     'department'=>$v[2],
     'create_id' =>$admin_id,
     'create_time'=>date('Y-m-d H:i:s'),
     );
     $data_errors[] = $error_data;
     }
    
        }
     $errors_data = count($data_errors);
     $repetition = $cn-$errors_data;
     $success=db('member')->insertAll($datas); //批量插入数据
     if($success){
     $cn_fail=count($data_errors);
     $content = "批量新增抽奖参与者名单记录:".json_encode($data);
     $this->writelog($admin_id,$content,'4');//4出席成员
     $error=$cn-$success;
     $error_all = $error-$cn_fail;
     $data = array(
     'code'=>1,
     'message'=>"总{$cn}条,导入成功{$success}条,其中失败{$cn_fail}条,重复{$error_all}条",
     'result'=>$data_errors,
     );
     return json($data);
     }
     return json(['code'=>1,'message'=>"总{$cn}条,导入成功0条,其中重复{$repetition}条,失败{$errors_data}条",'result'=>$data_errors]);
    }else{
     // 上传失败获取错误信息
     return json(['code'=>2,'message'=>'导入失败','result'=>null]);
    }
  • 相关阅读:
    Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
    安卓四大组件总览
    摆脱命令行,Ubuntu下配置Android开发环境
    【翻译】使用Sencha Ext JS创建美丽的图画(1)
    linux后台运行springboot项目
    AES地址栏传参加密
    最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
    阿里云服务器+ftp文件操作+基于Centos7的vsftpd配置
    解决服务器发回了不可路由的地址。使用服务器地址代替的问题
    解决vsftpd的refusing to run with writable root inside chroot错误
  • 原文地址:https://www.cnblogs.com/ws1992/p/8376024.html
Copyright © 2020-2023  润新知