thinkphp导入Excel去重

来源:互联网 发布:算法导论思考题答案 编辑:程序博客网 时间:2024/04/28 01:31
/*导入Excel有两种可能
  1.导入的Excel本身就有重复项
  2.导入的Excel数据和已有的数据库信息有重复项
  解决思路:
  1.先不管是否有重复项,直接导入到一张临时表,然后经过去重处理插入到一张新表(比较麻烦,数据处理过程多)
  2.先获取Excel的数据,然后循环读取数据,在循环里把每条数据和数据库里的数据进行对比,如果没有就插入,
    如果有就更新这条数据(导入过程中就处理数据,过程简单)
*/
//导入Excelpublic function importExecl(){   import('ORG.Net.UploadFile');   $upload=new UploadFile();// 实例化上传类   $upload->allowExts=array('xls','xlsx');// 设置附件上传类型   $upload->savePath='./Uploads/';// 设置附件上传目录   $upload->saveRule=date('Ymdhis');//设置附件上传名称   if(!$upload->upload()){// 上传错误提示错误信息      $this->error($upload->getErrorMsg());   }else{//上传成功 获取上传文件信息      $info=$upload->getUploadFileInfo();   }   $filetmpname='./Uploads/'.$info[0]['savename'];//获取上传的Excel的文件名   import('ORG.Util.PHPExcel');   $objPHPExcel = PHPExcel_IOFactory::load($filetmpname);   $sheetCount = $objPHPExcel->getSheetCount();   $excelarr=array();   $excelarr= $objPHPExcel->getSheet(0)->toArray();   $line_list=M("line_list");      for($i=1;$i<=count($excelarr);$i++) {      $data['type'] = $excelarr[$i][0];      $data['account_name'] = $excelarr[$i][1];      $data['clerk'] = $excelarr[$i][2];      $data['checkin_time'] = $excelarr[$i][3];      $data['client_name'] = $excelarr[$i][4];      $data['project'] = $excelarr[$i][5];      $data['capacity'] = $excelarr[$i][6];      $data['line_number'] = $excelarr[$i][7];      $data['monthly_amount'] = $excelarr[$i][8];      $data['open_time'] = $excelarr[$i][9];      $data['billing_time'] = $excelarr[$i][10];      $data['down_time'] = $excelarr[$i][11];      $data['invoice'] = $excelarr[$i][12];      $data['status'] = $excelarr[$i][13];      $data['remarks'] = $excelarr[$i][14];//上面的$date是读取Excel的每条数据
      $result = $line_list->where ("line_number='{$data['line_number']}'")->field('id,line_number')->find();      if (empty($result['line_number'])) {         $rs = $line_list->add ($data);//如果线路编号为空就添加这条数据      }else{         $rs=$line_list->where("id='{$result['id']}'")->save($data);//如果已有这条数据就更新这条数据      }   }   if($rs){      unlink($filetmpname);//这里是删除上传后的文件      $this->success("上传成功","__URL__/index");   }else{      $this->error("上传失败","__URL__/index");   }}