Yii2中使用PHPExcel导入批量用户(读取excel数据)

  •   
  • 16143
  • PHP
  • 0
  • super_dodo
  • 2015/12/31

对于一些后台系统需要对批量数据的excel导入系统,这个时候就需要用到phpexcel。首先下载phpexcel,可以到https://github.com/PHPOffice/PHPExcel上面下载,我下载的是1.8的版本。

下载之后解压提取Classes 下面的内容复制到 /extensions/phpexcel/ 下面。

view部分代码:

<form action="/member/import" method="post" id="post_form" enctype="multipart/form-data">
	<table class="post_table" id="post_table">
		<tbody>
		<tr>
			<td>字段说明</td>
			<td>用户名不能重复(建议手机号码),用户密码不能少于6位.</td>
		</tr>
		<tr>
			<td>字段说明</td>
			<td>性别和店铺类型请填写整数(性别 1男 2女 3保密) (店铺类型 1特约 2堆垛 3无).</td>
		</tr>
		<tr>
			<td>选择上传文件</td>
			<td>
				<input type="hidden" name="MAX_FILE_SIZE" value="5000000" />
				<input name="file" type="file" class="btn btn-warning" />
			</td>
		</tr>
		</tbody>
	</table>
	<input id="addBtn" type="submit" name="submit" class="btn btn-success btn-lg" style="margin:20px 200px;text-align:center;" value="批量导入用户数据">
</form>
<?php
	if(!empty($data)){//对反馈导入数据的成功失败进行展示,提示用户
		if($data['error'] == '0'){
			$okk = $data['info']['okk'];
			$err = $data['info']['err'];
			foreach ($err as $errItem){ echo '<p style="color:#ff5800">'.$errItem.'</p>'; }
			echo '<hr>';
			foreach ($okk as $okkItem){ echo '<p style="color:green">'.$okkItem.'</p>'; }
		}else{
			echo '<h2 style="color:#ff5800">'.$data['msg'].'</h2>';
		}
	}
?>

控制器Controller处理代码如下

// 批量添加用户数据(备注:)
public function actionImport() {
	set_time_limit(0);
	ini_set('memory_limit','256M');		
	require '/extensions/phpexcel/PHPExcel.php';		//引入PHPExcel
	$request = Yii::$app->request;
	$data = array();
	if($_POST){
		if($_FILES["file"]["error"] > 0){
			$data = array('error'=>'1','msg'=>'文件上传失败,请重新上传..','info'=>'');
		}
		$excelFile = '';	//文件名
		$filepath = "upload/excel";
		$allowtype=array("xls");
		$arr=explode(".", $_FILES["file"]["name"]);
		$hz=strtolower($arr[count($arr)-1]);

		if(!is_dir($filepath)) { mkdir($filepath, 0777); chmod($filepath, 0777);}
		$randname = date("Y").date("m").date("d").date("H").date("i").date("s").rand(1000, 9999).".".$hz;
		if(is_uploaded_file($_FILES["file"]["tmp_name"])){		//将临时位置的文件移动到指定的目录上即可
			if(move_uploaded_file($_FILES["file"]["tmp_name"], $filepath.'/'.$randname)){
				$excelFile = $filepath.'/'.$randname;		//上传成功的节奏
				chmod($excelFile, 0777);
			}
		}
		if(!$excelFile){		//文件不存在
			$data = array('error'=>'2','msg'=>'文件上传失败,请重新上传,检查文件名..','info'=>'');
		}else{		//读取Excel
			$phpexcel = new \PHPExcel;
			$excelReader = \PHPExcel_IOFactory::createReader('Excel5');
			$phpexcel = $excelReader->load($excelFile)->getSheet(0);//载入文件并获取第一个sheet
			$total_line = $phpexcel->getHighestRow();			//多少行
			$total_column = $phpexcel->getHighestColumn();		//多少列
			$info = array();
			$okk = array();
			$err = array();
			for($row = 2; $row <= $total_line; $row++) {
				$oneUser = array();
				for($column = 'A'; $column <= 'K'; $column++) {
					$oneUser[] = trim($phpexcel->getCell($column.$row)->getValue());
				}

				$username = $oneUser[3];		//用户名
				$pwd = $oneUser[4];				//密码
				$existUser = MemberList::find()->where("username='{$username}'")->exists();
				if($existUser){$err[] = $username.'###该用户名已被注册使用,请换一个';break; }

				$memModel = new MemberList;
				$memModel->username = $username;
				$memModel->password = AuthUser::md9Password($pwd);
				$memModel->vip_id = $oneUser[0];
				$memModel->sale_id = $oneUser[1];
				$memModel->staff_id = $oneUser[2];
				$memModel->nickname = $oneUser[5];
				$memModel->tel = $oneUser[6];
				$memModel->sex = $oneUser[7];
				$memModel->vip_type = $oneUser[8];
				$memModel->vip_name = $oneUser[9];
				$memModel->address = $oneUser[10];
				$memModel->add_user = '';
				$memModel->add_time = time();
				$memModel->isNewRecord = true;
				if(!$memModel->save()){
					$err[] = $username.'###该用户添加失败,请检查';break;
				}
				
				$okk[] = $username.'###该用户导入成功!!!';
			}
			$info['err'] = $err;
			$info['okk'] = $okk;
			$data = array('error'=>'0','msg'=>'成功','info'=>$info);
		}
	}
	return $this->render('import',['data'=>$data]);
}

温馨提示:注意form表单的enctype="multipart/form-data"

对于数据量大的情况下。。进行优化和测试。。此处我遇到报错即可break退出。你也可以根据需要continue

对于文件上传,文件格式大小等的判断请根据需要进行控制和限制。

友情链接下一篇 Yii2中使用PHPExcel导出数据到浏览器(导出数据到excel)

2015再见,2016您好!!!