getActiveSheet(); // 设置表头 $sheet->setCellValue('A1', '原文件名'); $sheet->setCellValue('B1', '新序号'); $sheet->setCellValue('C1', '电话'); $sheet->setCellValue('D1', '姓名'); // 序号起始值 // $startNumber = 24101; // $startNumber = 24201; $startNumber = 24301; $row = 2; // 从第二行开始写入数据 $mingzi_str = ''; // 遍历目录中的图片文件 if ($handle = opendir($imageDir)) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != ".." && preg_match('/\.(jpg|jpeg|png|gif)$/i', $entry)) { // dump($entry); $mingzi_str = $this->str_jiequ($entry); // dump($mingzi_str); // dump($mingzi_str); // 写入原文件名 $sheet->setCellValue('A' . $row, $entry); // 生成新序号(注意:这里的序号示例是连续的,如果需要跳号,请调整逻辑) $newNumber = $startNumber + ($row - 2); $sheet->setCellValue('B' . $row, $newNumber); if($mingzi_str != false){ $sheet->setCellValue('C' . $row, $mingzi_str[0]); $sheet->setCellValue('D' . $row, $mingzi_str[1]); } // 实际文件路径和新文件名 $oldFilePath = $imageDir . DS . $entry; $newFilePath = $imageDir . DS . $newNumber . '.' . pathinfo($entry, PATHINFO_EXTENSION); // 重命名图片文件 if (rename($oldFilePath, $newFilePath)) { // 重命名成功 } else { // 重命名失败,记录错误或抛出异常 throw new \Exception("Failed to rename file: " . $entry); } $row++; } } closedir($handle); } // die; // 写入Excel文件到服务器 $fileName = 'image_rename_log_' . date('YmdHis') . '.xlsx'; $filePath = $imageDir . DS . $fileName; // 使用PHPExcel_IOFactory保存Excel文件 $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save($filePath); dump('完事'); } // 截取字符串 public function str_jiequ($str){ // $str = "余航13838799761.jpg"; $banPos = strpos($str, '班'); $banPos = $banPos + 3; // $str = substr($str, $banPos+1); $str = substr($str, $banPos); // dump($banPos); // dump($str); // 查找“.jpg”的位置 $dotPos = strpos($str, '.jpg'); if ($dotPos !== false) { // 去除“.jpg”扩展名 $strWithoutExt = substr($str, 0, $dotPos); // 假设电话号码是11位数字 $phoneLength = 11; // 检查电话号码长度是否合法 if (strlen($strWithoutExt) >= $phoneLength && ctype_digit(substr($strWithoutExt, -$phoneLength))) { // 提取电话号码 $phone = substr($strWithoutExt, -$phoneLength); // 提取中文名字(即去掉电话号码和“.jpg”之前的部分) $name = substr($strWithoutExt, 0, strlen($strWithoutExt) - $phoneLength); // echo "名字: $name\n"; // echo "电话号码: $phone\n"; return [$name,$phone]; } else { return false; // echo "字符串格式不正确,无法提取名字和电话号码。\n"; } } else { return false; // echo "字符串中未找到“.jpg”扩展名。\n"; } } ################################################################业务接口################################################################ ################################################################业务接口################################################################ ################################################获取execl中数组 public function submit_rule(){ // $file = request()->file('file'); $file = request()->file('execl'); $name = request()->param(); $address_data = explode(',',$name['address']); // dump($name); // die; if($name['type'] == 'create'){ $rule_is_true = Db::table('admin_estimate')->where(['province'=>$address_data[0],'city'=>$address_data[1]==''?'无':$address_data[1]])->count(); if($rule_is_true > 0){ return $this->msg(10007); } } if($file){ // 移动到框架应用根目录/public/uploads/ 目录下 $file_name_new = date('YmdHis').'_ceshi.xlsx'; $info = $file->validate(['size' => 2048000, 'ext' => 'xlsx'])->move(ROOT_PATH . 'public' . DS . 'estimate',$file_name_new); if($info){ $original_data = $this->excelToArray(ROOT_PATH . 'public' . DS . 'estimate' . DS . $info->getSaveName()); $handle_data = $this->transformation_data($original_data,$address_data,$name['type']); // die; // dump($handle_data); // die; if($name['type'] == 'create'){ $result = Db::table('admin_estimate')->insert($handle_data); }else{ $result = Db::table('admin_estimate')->where(['id'=>$name['update_id']])->update($handle_data); } // return $this->msg(10002); // 成功上传后 获取上传信息 // 输出 jpg // echo $info->getExtension(); // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg // echo $info->getSaveName(); // // 输出 42a79759f284b767dfcb2a0197904287.jpg // echo $info->getFilename(); if($result){ return $this->msg([]); }else{ return $this->msg(10002); } }else{ // 上传失败获取错误信息 return $this->msg(10001, $file->getError()); // echo $file->getError(); } }else{ return $this->msg(10001, '文件缺失'); } } // 读取execl文件数据 private function excelToArray($filename){ vendor('PHPExcel.PHPExcel'); $objPHPExcelReader = \PHPExcel_IOFactory::load($filename); $sheet = $objPHPExcelReader->getSheet(0); // 读取第一个工作表(编号从 0 开始) $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = \PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()); // 取得总列数 // 一次读取一列 $res_arr = array(); for ($row = 2; $row <= $highestRow; $row++) { $row_arr = array(); for ($column = 0; $column < $highestColumn; $column++) { //判断单元格是否包含公式 if ($sheet->getCellByColumnAndRow($column, $row)->isFormula()) { $val = $sheet->getCellByColumnAndRow($column, $row)->getFormattedValue(); } else { $val = $sheet->getCellByColumnAndRow($column, $row)->getValue(); } $row_arr[] = $val; } if (count($row_arr) > 0) { $res_arr[] = $row_arr; } } return $res_arr; } //处理估分数据格式 private function transformation_data($data,$daaress,$type='create'){ // dump($daaress); $temporary_daaress = $daaress; // dump($temporary_daaress); // die; if($type == 'create'){ $return_result = [ 'province'=>$temporary_daaress[0] == ''?'无':$temporary_daaress[0], 'city'=>$temporary_daaress[1] == ''?'无':$temporary_daaress[1], 'area'=>'无', 'create_time'=>date('Y-m-d H:i:s'), 'update_time'=>date('Y-m-d H:i:s'), 'content'=>[] ]; }else{ $return_result = [ 'update_time'=>date('Y-m-d H:i:s'), 'content'=>[] ]; } $temporary_array = []; $gender = []; $rule_c = []; foreach ($data as $key => $value) { $gender = explode(',',$value[5]); if($value[6] == '无' || $value[7] == '无' || $value[8] == '无'){ $rule_c = []; }else{ $rule_c = [[$value[6],$value[7],$value[8]]]; } foreach ($gender as $gk => $gv) { if(!array_key_exists($gv,$temporary_array)){ // 如果性别不存在 // $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2]; $temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [ 'unit_data'=>$value[4], 'proportion'=>$value[10], 'value'=>$value[11], 'type'=>$value[12], 'describe'=>$value[13], 'score'=>$value[2], ]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c; // if($value[6] == null){ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = []; // }else{ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]]; // } }else{ // 如果性别已经存在 if(!array_key_exists($value[0],$temporary_array[$gv])){ // 如果第一分类不存在 // $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2]; $temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [ 'unit_data'=>$value[4], 'proportion'=>$value[10], 'value'=>$value[11], 'type'=>$value[12], 'describe'=>$value[13], 'score'=>$value[2], ]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c; // if($value[6] == null){ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = []; // }else{ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]]; // } }else{ // 第一分类存在 if(!array_key_exists($value[1],$temporary_array[$gv][$value[0]])){ // 如果第二分类不存在 // array_push($temporary_array[$value[0]]); // $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2]; $temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [ 'unit_data'=>$value[4], 'proportion'=>$value[10], 'value'=>$value[11], 'type'=>$value[12], 'describe'=>$value[13], 'score'=>$value[2], ]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c; // if($value[6] == null){ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = []; // }else{ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]]; // } }else{ // 第二分类存在 if(!array_key_exists($value[3],$temporary_array[$gv][$value[0]][$value[1]]['list'])){ // 如果项目名不存在 // $temporary_array[$gv][$value[0]][$value[1]]['score'] = $value[2]; $temporary_array[$gv][$value[0]][$value[1]]['choose_num'] = $value[9]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]] = [ 'unit_data'=>$value[4], 'proportion'=>$value[10], 'value'=>$value[11], 'type'=>$value[12], 'describe'=>$value[13], 'score'=>$value[2], ]; $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = $rule_c; // if($value[6] == null){ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = []; // }else{ // $temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'] = [[$value[6],$value[7],$value[8]]]; // } }else{ array_push($temporary_array[$gv][$value[0]][$value[1]]['list'][$value[3]]['content'],[$value[6],$value[7],$value[8]]); } } } } } } // return $temporary_array; $temporary_array = json_encode($temporary_array); $return_result['content'] = $temporary_array; return $return_result; } ################################################################其他接口################################################################ ################################################################其他接口################################################################ // 查看所有地市卡片项目种类 public function cards_select_all(){ $data = Db::table('admin_estimate')->where(['type'=>1])->field('id,province,city,area,content')->select(); $card_arr = []; $exception_arr = ['7年级','8年级','9年级','七年级','八年级','九年级','七年级下学期','八年级上学期','八年级下学期','九年级上学期','BMI','肺活量','机考','体质健康达标','体育课','《国家学生体质健康标准》','体育综合知识测试成绩','体育课考评','一小时阳光体育活动','']; foreach ($data as $key => $value) { $data[$key]['content'] = json_decode($value['content'],true); // dump($data[$key]['city']); if(!array_key_exists($data[$key]['city'], $card_arr)){ $card_arr[$data[$key]['city']] = []; } // 开始遍历内容 foreach ($data[$key]['content'] as $k1 => $v1) { // 遍历男女 foreach ($v1 as $k2 => $v2) { // 遍历现场还是日常 foreach ($v2 as $k3 => $v3) { // 遍历大分支(第一类目) foreach ($v3['list'] as $k4 => $v4) { // 遍历项目名 // dump($k4); // dump($v4); // if($k4 == '轮滑过桩'){ // dump($data[$key]['province']); // dump($data[$key]['city']); // } if(!in_array($k4, $exception_arr)){ if(!in_array($k4.'-----------'.$v4['unit_data'], $card_arr[$data[$key]['city']])){ // if(!in_array($k4, $card_arr[$data[$key]['city']])){ // array_push($card_arr[$data[$key]['city']],$k4.'-------'.($k1 == 1?'男':'女').'-----------'.$v4['unit_data']); array_push($card_arr[$data[$key]['city']],$k4.'-----------'.$v4['unit_data']); // array_push($card_arr[$data[$key]['city']],$k4); } } } } } } } dump($card_arr); } }