<? //下载模板的请求 if(isset($_GET[\'action\']) && $_GET[\'action\'] ==\'down_group_excel\'){ $code = down_excel_templates(\'t_group\'); } //下载excel模板 function down_excel_templates($type = \'t_group_member\'){ if(strcasecmp($type, \'t_group_member\') === 0){ $filename = \'student模板\'; }else{ $filename = \'group模板\'; } header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=".$filename.".xls"); $data = get_execl_template($type); $strexport = \'\'; foreach($data AS $v){ $strexport .= $v . "\t"; } $strexport=iconv(\'UTF-8\',"GB2312//IGNORE",$strexport); exit($strexport); } //获取模板数据 function get_execl_template($type = \'t_group_member\'){ $data = [ \'t_group_member\' => [ \'student_id\' => \'学号\', //key对应数据表wp_t_group_member的字段 \'user_name\' => \'姓名\', \'pinyin\' => \'拼音\', \'user_email\' => \'邮箱\', \'group_name\' => \'组织名称\', \'role\' => \'角色(填学生*或讲师)\' ], \'t_group\' => [ \'group_name\' => \'开课班名\', //key对应数据表wp_t_group的字段 \'org_name\' => \'组织名\', \'course_name\'=> \'课程名\', \'start_time\' => \'开始时间\', \'end_time\' => \'结束时间\', ], ]; if(!array_key_exists($type, $data)){ //key不存在 $type = \'t_group_member\'; } return $data[$type]; } //上传文件的请求 if(isset($_POST[\'action\']) && $_POST[\'action\'] ==\'import_group\'){ import_excel(\'group\'); } /** * 验证上传的文件 * @param FILES $filename; $_FILES * @param FILES $tmp_name; $_FILES * @param string $type; 二级目录 * @param string $root_path; 指定目录 **/ function validate_upload_file($filename, $tmp_name, $type = \'excel\', $root_path = \'\' ){ if(!$filename || !$tmp_name){ return false; } //判断文件格式 $path_parts = pathinfo($filename); $extension = strtolower($path_parts[\'extension\']) ; if ( !in_array($extension, array(\'xls\',\'xlsx\'))) { echo json_encode( [\'code\' => 1, \'msg\' => "文件格式不正确,请重新选择" ]);exit; } //判断目录是否指定,不指定为默认 $type = \'excel\'; if(!$root_path) { $root_path = "./upload/$type/" . date(\'Y-m-d\', time()) . "/"; } //检查文件或目录是否存在 if(!file_exists($root_path)) { @mkdir($root_path,0777,true); @chmod($root_path,0777); } //上传后的文件名 $rand_name = substr(md5(rand(10,99)), 0,4) ; $name = date(\'YmdHis\').$rand_name.\'.\'.$extension ; $real_file = $root_path.$name; //上传后的文件名地址 //移动上传文件 $result = move_uploaded_file($tmp_name, $real_file); return [\'name\' => $name, \'real_file\' => $real_file, \'result\' => $result]; } /** * 导入数据 * @param string $name <input>控件的名称 * @param string $type; 二级目录 * @param string $root_path; 指定目录 **/ function import_excel($name = \'\', $type = \'excel\', $root_path = \'\'){ if($_FILES && isset($_FILES[$name][\'name\'])){ $filename = $_FILES[$name][\'name\']; $tmp_name = $_FILES[$name][\'tmp_name\']; //验证文件并导入 $table = \'t_group_member\'; if(strcasecmp($name,\'group\') === 0){ $table = \'t_group\'; } $result = importdata( $filename, $tmp_name,$table, $type, $root_path); if(is_array($result)){ echo json_encode([\'code\' => 1,\'data\' => $result, \'msg\' => \'有部分上传失败!详情按F12查看\']);exit; } echo json_encode([\'code\' => 0, \'msg\' => \'success\']);exit; }else{ echo json_encode([\'code\' => 1, \'msg\' => \'请选择文件!\']);exit; } } /** * 验证上传的文件 * @param FILES $filename; $_FILES * @param FILES $tmp_name; $_FILES * @param string $type; 二级目录 * @param string $root_path; 指定目录 **/ function importdata ($filename, $tmp_name ,$table = \'\',$type = \'excel\', $root_path = \'\') { //设置超时时间 set_time_limit(0); //引入phpexcel require_once(__LIB__ . "PHPExcel/Classes/PHPExcel.php"); require_once(__LIB__ . "PHPExcel/Classes/PHPExcel/IOFactory.php"); require_once(__LIB__ . "PHPExcel/Classes/PHPExcel/Reader/Excel5.php"); //验证 $msg = []; $data = validate_upload_file( $filename, $tmp_name ,$type, $root_path); $result = $data[\'result\']; $real_file = $data[\'real_file\']; if ( $result ) { $PHPExcel = new PHPExcel() ; $PHPReader = new PHPExcel_Reader_Excel2007(); if( !$PHPReader->canRead($real_file) ){ $PHPReader = new PHPExcel_Reader_Excel5(); if( !$PHPReader->canRead( $real_file ) ){ echo json_encode( [\'code\' => 1, \'msg\' => "文件不可读,请重新选择" ]);exit; } } $_excelData = array() ; //读取excel $PHPExcel = $PHPReader->load( $real_file ); //获取工作表的数目 $sheet_count = $PHPExcel->getSheetCount(); for ( $i = 0; $i < $sheet_count; $i++ ) { $_currentSheet = $PHPExcel->getSheet( $i ) ; $_allRow = $_currentSheet->getHighestRow(); //获取Excel中信息的行数 $_allColumn = $_currentSheet->getHighestColumn();//获取Excel的列数 $highestRow = intval( $_allRow ) ; $highestColumn = PHPExcel_Cell::columnIndexFromString($_allColumn);//有效总列数 $field = array_keys(get_execl_template($table)); //获取模板的字段顺序 for( $row = 2; $row <= $highestRow; $row++ ) { for ($col = 0; $col < count($field); $col++) { //列只获取模板的字段个数 $_excelData[$field[$col]] = $_currentSheet->getCellByColumnAndRow($col, $row)->getValue(); } if (empty($_excelData)) { $msg[] = array(\'s_type\' => "导入失败", \'do_content\' => $filename . " 下 Sheet" . ($i + 1) . " 中第 " . $row . " 行导入失败", \'do_time\' => date("Y-m-d H:i:s")); unset($_excelData); continue; } if ($_excelData) { //插入数据库 $code = insert_table($table, $_excelData); if($code !== true){ $msg[] = array(\'s_type\' => "插入失败", \'do_content\' => $filename . " 下 Sheet" . ($i + 1) . " 中第 " . $row . " 行插入失败:".$code, \'do_time\' => date("Y-m-d H:i:s")); }; } unset($_excelData); } } if($msg) { return $msg; } }else{ echo json_encode( [\'code\' => 1, \'msg\' => "文件上传失败,请重新选择" ]);exit; } } /** * 将数据添加到对应的表中 * @param string $table ; 数据表名 * @param array $data ; 添加的数据 * @return string true添加成功,其他是错误信息 **/ function insert_table($table = \'\', $data = []){ global $db; if(!$table || !$data || !is_array($data)){ return false; } //验证是否数据正确 switch($table){ case \'t_group_member\': //验证t_group_member模板的数据,然后保存 //出错可根据需要,是否还继续。不继续 return \'错误信息\'; break; case \'t_group\': //验证t_group模板的数据,然后保存 break; default: return \'没有该模板的数据!\'; break; } return true; }