999, 'msg'=>'错误' ]; //实例化PHPExcel类 $path = public_path().'storage/'.$path; $PHPExcel = new \PHPExcel(); //默认用excel2007读取excel,若格式不对,则用之前的版本进行读取 $PHPReader = new \PHPExcel_Reader_Excel2007(); if (!$PHPReader->canRead($path)) { $PHPReader = new \PHPExcel_Reader_Excel5(); if (!$PHPReader->canRead($path)) { $result['msg'] = '请上传excel文件'; return $result; } } //读取Excel文件 $PHPExcel = $PHPReader->load($path); //读取excel文件中的第一个工作表 $sheet = $PHPExcel->getSheet(0); //取得最大的列号 $allColumn = $sheet->getHighestColumn(); //取得最大的行号 $allRow = $sheet->getHighestRow(); #清除表 //从第二行开始插入,第一行是列名 $month = []; $month2 = []; $i = 0; //检测数据 for ($currentRow = 4; $currentRow <= $allRow; $currentRow++){ $number = $PHPExcel->getActiveSheet()->getCell("A" . $currentRow)->getValue(); if(!$number){ break; } $array = [ 'month'=>$PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue(), 'phone'=>$PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue(), // 'name'=>$PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue(), 'days'=>$PHPExcel->getActiveSheet()->getCell("E" . $currentRow)->getValue(), 'real_days'=>$PHPExcel->getActiveSheet()->getCell("F" . $currentRow)->getValue(), 'late'=>$PHPExcel->getActiveSheet()->getCell("G" . $currentRow)->getValue(), 'leave'=>$PHPExcel->getActiveSheet()->getCell("H" . $currentRow)->getValue(), 'absenteeism'=>$PHPExcel->getActiveSheet()->getCell("I" . $currentRow)->getValue(), 'late_deduct'=>$PHPExcel->getActiveSheet()->getCell("J" . $currentRow)->getValue(), 'leave_deduct'=>$PHPExcel->getActiveSheet()->getCell("K" . $currentRow)->getValue(), 'absenteeism_deduct'=>$PHPExcel->getActiveSheet()->getCell("L" . $currentRow)->getValue(), 'other_deduct'=>$PHPExcel->getActiveSheet()->getCell("M" . $currentRow)->getValue(), 'sum_deduct'=>$PHPExcel->getActiveSheet()->getCell("N" . $currentRow)->getValue(), 'other_reward'=>$PHPExcel->getActiveSheet()->getCell("O" . $currentRow)->getValue(), 'remark'=>$PHPExcel->getActiveSheet()->getCell("P" . $currentRow)->getValue(), 'create_time'=>date('Y-m-d'), 'valid'=>1, 'enterprise_id'=>$login_staff->enterprise_id, ]; $month[$i][$array['month']] = $array['phone']; $month2[$i][$array['phone']] = $array['month']; $i++; $user = \app\common\model\User::where('phone',$array['phone'])->find(); if (!$user){ $msg = '导入数据错误,请检查报表格式或者手机号数据·1'; $result['msg'] = $msg; return $result; } $staff = \app\common\model\Staff::where(['user_id'=>$user->id,'enterprise_id'=>$login_staff->enterprise_id])->find(); if (!$staff){ $msg = '导入数据错误,请检查报表格式或者手机号数据·2'; $result['msg'] = $msg; return $result; } if ($array['days']>31){ $msg = $staff->name.'应出勤天数不得超过31天'; $result['msg'] = $msg; return $result; } if ($array['late_deduct']+$array['leave_deduct']+$array['absenteeism_deduct']+$array['other_deduct']!=$array['sum_deduct']){ $msg = $staff->name.'扣款合计不正确'; $result['msg'] = $msg; return $result; } } if (count(self::get_repeat_data($month))){ $msg = '导入数据重复'; $result['msg'] = $msg; return $result; } for ($currentRow = 4; $currentRow <= $allRow; $currentRow++) { //获取B列的值 $number = $PHPExcel->getActiveSheet()->getCell("A" . $currentRow)->getValue(); if(!$number){ $msg = '导入成功'; $result['code'] = 0; $result['msg'] = $msg; break; } $data = [ 'month'=>$PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue(), 'phone'=>$PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue(), // 'name'=>$PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue(), 'days'=>$PHPExcel->getActiveSheet()->getCell("E" . $currentRow)->getValue(), 'real_days'=>$PHPExcel->getActiveSheet()->getCell("F" . $currentRow)->getValue(), 'late'=>$PHPExcel->getActiveSheet()->getCell("G" . $currentRow)->getValue(), 'leave'=>$PHPExcel->getActiveSheet()->getCell("H" . $currentRow)->getValue(), 'absenteeism'=>$PHPExcel->getActiveSheet()->getCell("I" . $currentRow)->getValue(), 'late_deduct'=>$PHPExcel->getActiveSheet()->getCell("J" . $currentRow)->getValue(), 'leave_deduct'=>$PHPExcel->getActiveSheet()->getCell("K" . $currentRow)->getValue(), 'absenteeism_deduct'=>$PHPExcel->getActiveSheet()->getCell("L" . $currentRow)->getValue(), 'other_deduct'=>$PHPExcel->getActiveSheet()->getCell("M" . $currentRow)->getValue(), 'sum_deduct'=>$PHPExcel->getActiveSheet()->getCell("N" . $currentRow)->getValue(), 'other_reward'=>$PHPExcel->getActiveSheet()->getCell("O" . $currentRow)->getValue(), 'remark'=>$PHPExcel->getActiveSheet()->getCell("P" . $currentRow)->getValue(), 'create_time'=>date('Y-m-d'), 'valid'=>1, 'enterprise_id'=>$login_staff->enterprise_id, // 'time'=>self::get_date_by_excel($PHPExcel->getActiveSheet()->getCell("F" . $currentRow)->getValue()), ]; $user = \app\common\model\User::where('phone',$data['phone'])->find(); $staff = \app\common\model\Staff::where(['user_id'=>$user->id,'enterprise_id'=>$login_staff->enterprise_id])->find(); $data['staff_id'] = $staff->id; $data['name'] = $staff->name; $where['enterprise_id']=$login_staff->enterprise_id; $where['month']=$data['month']; $where['staff_id']=$data['staff_id']; $LeaveModel->where($where)->delete(); #插入表 $LeaveModel = new \app\common\model\Leave(); $LeaveModel->save($data); } return $result; } //获取二维数组的重复数据 public static function get_repeat_data($array){ //这里的$array在数据库查询的时候要group by排序一下 //计算出数组的总数量 $count = count($array); $repeat_data = []; //循环从0开始逐次+1 for($i=0;$i<$count;$i++){ //每次都比第一层循环+1,如果第一层循环0数据,第二层就循环1数据,以此类推 for($j=$i+1;$j<$count;$j++){ //比较两次数据是否相等 if($array[$i] == $array[$j]){ $repeat_data[$i]=$array[$i]; $repeat_data[$j]=$array[$j]; } } } return $repeat_data; } }