php导入excel实现批量添加会员
1.公司最近业务要求后台能通过导入excel实现批量添加用户
2.基于微擎
3.前台页面不多讲
4.后台处理代码,没有做的文件过滤。看官需注意,永远不要相信用户的输入,应为后台一般都是公司人员登入,所以,难得搞
elseif ($op=="adminAddUserAll"){ if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["userfile"]["error"] . "<br />"; } else { // echo "Upload: " . $_FILES["userfile"]["name"] . "<br />"; // echo "Type: " . $_FILES["userfile"]["type"] . "<br />"; // echo "Size: " . ($_FILES["userfile"]["size"] / 1024) . " Kb<br />"; // echo "Stored in: " . $_FILES["userfile"]["tmp_name"]."<br/>"; if (file_exists(IA_ROOT.'/attachment/temp/'.$_FILES["userfile"]["name"])) { echo $_FILES["userfile"]["name"] . " 文件已经存在。 "; } else { // 如果 temp目录不存在该文件则将文件上传到 attachment/temp目录下 move_uploaded_file($_FILES["userfile"]["tmp_name"], IA_ROOT.'/attachment/temp/' . $_FILES["userfile"]["name"]); $file_url=IA_ROOT. "/attachment/temp/" . $_FILES["userfile"]["name"]; $res=inport_user($file_url); } if($res){ message("添加成功", $this->createWebUrl("user", array('op' => 'display')), "success"); }else{ message("添加失败", $this->createWebUrl("user", array('op' => 'display')), "error"); } }
5.添加inport_user方法
function inport_user($file_url){ //global $_W; include IA_ROOT . '/framework/library/phpexcel/PHPExcel.php'; include IA_ROOT . '/framework/library/phpexcel/PHPExcel/IOFactory.php'; include IA_ROOT . '/framework/library/phpexcel/PHPExcel/Reader/Excel5.php'; if (!file_exists($file_url)) { die('no file!'); } $extension = strtolower( pathinfo($file_url, PATHINFO_EXTENSION) ); if ($extension =='xlsx') { $objReader = new PHPExcel_Reader_Excel2007(); $objExcel = $objReader ->load($file_url); } else if ($extension =='xls') { $objReader = new PHPExcel_Reader_Excel5(); $objExcel = $objReader ->load($file_url); } else if ($extension=='csv') { $PHPReader = new PHPExcel_Reader_CSV(); //默认输入字符集 $PHPReader->setInputEncoding('GBK'); //默认的分隔符 $PHPReader->setDelimiter(','); //载入文件 $objExcel = $PHPReader->load($file_url); } // $sheet = $objExcel ->getSheet(0); // $objReader=PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format // $objPHPExcel=$objReader->load($file_url);//$file_url即Excel文件的路径 $sheet=$objExcel->getSheet(0);//获取第一个工作表 $highestRow=$sheet->getHighestRow();//取得总行数 $highestColumn=$sheet->getHighestColumn(); //取得总列数 //循环读取excel文件,读取一条,插入一条 pdo_begin(); for($j=2;$j<=$highestRow;$j++){//从第一行开始读取数据 $str=''; for($k='A';$k<=$highestColumn;$k++){ //从A列读取数据 //这种方法简单,但有不妥,以'\\'合并为数组,再分割\\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空 $str.=$objExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格 } //explode:函数把字符串分割为数组。 $strs=explode("\\",$str); $data = array( 'mobile' =>$strs[0], 'relation' =>$strs[2].'-'.'0' , 'password' =>'abc123',//密码暂用abc123代替 //'repassword' =>$_GPC['repassword'], 'salt' => random(8), 'createtime' =>TIMESTAMP, 'uniacid' =>34 ); $flag = pdo_insert('mc_members', $data); if (!$flag) { $this->exitJson('添加失败!', 1,$flag); pdo_rollback(); } $uid = pdo_insertid();//返回最后插入数据的uid } pdo_commit(); unlink($file_url); //删除excel文件 return $uid; }
6.使用phpexcel时出现了一个这样的错误:
the filename xxx is not recognised as an OLE file
当文件后缀是xlsx 或者 csv 就会报:the filename xxx is not recognised as an OLE file错误。
inport_user里面提供了一个不错的解决方案
添加
$extension = strtolower( pathinfo($fileName, PATHINFO_EXTENSION) ); if ($extension =='xlsx') { $objReader = new PHPExcel_Reader_Excel2007(); $objExcel = $objReader ->load($file); } else if ($extension =='xls') { $objReader = new PHPExcel_Reader_Excel5(); $objExcel = $objReader ->load($file); } else if ($extension=='csv') { $PHPReader = new PHPExcel_Reader_CSV(); //默认输入字符集 $PHPReader->setInputEncoding('GBK'); //默认的分隔符 $PHPReader->setDelimiter(','); //载入文件 $objExcel = $PHPReader->load($file); } $sheet = $objExcel ->getSheet(0);