tp5 Excel导入

Posted on 2017-11-29 15:42  pai片儿的  阅读(317)  评论(0编辑  收藏  举报
/**
     * 导入Excel功能
     */
    public function import(){
        if (!empty($_FILES)) {
            $file = request()->file('import');
            $info = $file->rule('uniqid')->move(ROOT_PATH . 'public' . DS . 'suffix');

            if($info){
                $file_name = './public/suffix/'.$info->getFilename();
            }else{
                // 上传失败获取错误信息
                echo $file->getError();
            }

            Vendor('PHPExcel.PHPExcel');
            Vendor('PHPExcel.PHPExcel.Worksheet.Drawing');
            Vendor('PHPExcel.PHPExcel.Writer.Excel2007');
            // 读取Excel文件内容
            $PHPReader = new \PHPExcel_Reader_Excel2007();
            $PHPExcel = $PHPReader->load($file_name);
            $currentSheet = $PHPExcel->getSheet(0);  //读取excel文件中的第一个工作表
            $allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
            $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
            $arr = array();  //声明数组
            /**从第二行开始输出,因为excel表中第一行为列名*/
            for($currentRow = 2;$currentRow <= $allRow;$currentRow++){

                /**从第A列开始输出*/
                for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){
                    //这部分注释不要,取出的数据不便于我们处理
                    // $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
                    //  if($val!=''){
                    // 	 $erp_orders_id[] = $val;
                    // }
                    //数据坐标
                    $address = $currentColumn . $currentRow;
                    //读取到的数据,保存到数组$data中
                    $data[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue();
                    /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
                    //echo iconv('utf-8','gb2312', $val)."\t";
                }
            }
            foreach ($data as $k => $v) {
                $where = ['suffix'=>$v['A']];
                $num = Db('suffix')->where($where)->value('id');
                if(!$num){
                    $arr['suffix'] = $v['A'];
                    $arr['companyname'] = $v['B'];
                    $num = Db('suffix')->insert(['suffix'=>$arr['suffix'],'companyname'=>$arr['companyname'],'creat_time'=>date('y-m-d h:i:s')]);
                    if($num < 0){
                        return $this->error('导入数据库失败');
                    }
                }
            }

            return $this->success('导入成功');


        }


    }

  以上是TP5  导入

百度搜索下载PHPExcel类库,放到vendor文件夹里面

/**
	 * 导入Excel功能
	 */
	public function import(){
		 if (!empty($_FILES)) {
		 	$con = array(
		 			'exts' => array('xls','xlsx'),
		 			'rootPath' => './'.C("UPLOADPATH"),
		 			'maxSize' => 3145728,
		 			'savePath' => '',
		 			'subName' => '',
		 			'autoSub' => false
		 		);
		 	$upload = new \Think\Upload($con);// 实例化上传类
        	// 上传文件
        	$info   =   $upload->upload();
        	if (!$info) {
                $this->error();
            }
            vendor("excel.PHPExcel");
            $file_name=C("UPLOADPATH").$info['file']['savename'];

            // 读取Excel文件内容
            $PHPReader = new \PHPExcel_Reader_Excel2007();
            $PHPExcel = $PHPReader->load($file_name);
            $currentSheet = $PHPExcel->getSheet(0);  //读取excel文件中的第一个工作表
   			$allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
   			$allRow = $currentSheet->getHighestRow(); //取得一共有多少行
   			$arr = array();  //声明数组
   			$newuser = D("users");
   			/**从第二行开始输出,因为excel表中第一行为列名*/
   			for($currentRow = 2;$currentRow <= $allRow;$currentRow++){

       		/**从第A列开始输出*/
     			for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){
    			//这部分注释不要,取出的数据不便于我们处理
    			// $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/
    				//  if($val!=''){
    				// 	 $erp_orders_id[] = $val;
    			 // }
    				//数据坐标
             		$address = $currentColumn . $currentRow;
             		//读取到的数据,保存到数组$data中
             		$data[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue();
			     	/**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/
			     	//echo iconv('utf-8','gb2312', $val)."\t";
   				}
   			}
   			foreach ($data as $k => $v) {
			    $arr['user_nicename'] = $v['B'];//昵称
			     $arr['erpid'] = $v['C'];//ERP账号
			     $arr['company'] = $v['D'];//单位
			     $arr['caac'] = $v['E'];//证件号
			     $arr['workage'] = $v['F'];//司龄
			     $arr['education'] = $v['G'];//学历
			     $arr['degree'] = $v['H'];//学位
			     $arr['school'] = $v['I'];//院校
			     $arr['major'] = $v['J'];//专业
			     $arr['postname'] = $v['K'];//岗位名称
			     $arr['certificate'] = $v['L'];//企业资格认证
                 $arr['social'] = $v['M'];//社会资格认证
                 $arr['user_login'] = $v['N'];//账号
			     $arr['user_pass'] = sp_password($v['O']);//密码
                 $arr['mobile'] = $v['P'];//手机号

                 //确认是更新还是新增
                 $where = ['user_login'=>$arr['erpid']];
                 $return = $newuser->where($where)->getField('id');
                 // dump($return);exit;
                 if($return>0){
                    // dump(32132123);exit;
                    $where1 = ['id'=>$return];
                    $num = $newuser->where($where1)->save($arr);
                 }else{
                    $num = $newuser->add($arr);
                 }
			     if($num < 0){
			     	return $this->error('导入数据库失败');
			     }
			}

   			return $this->success('导入成功');


     	}


 	}

  写的不对  请一定告知我