thinkcmf5 Excel文件导入

以后台Excel导入来添加用户为例:

Controller

//Excel导入 添加用户
public function excelAddUser()
{
    if($this->request->isPost()){
        $excel_name = $this->request->param('excel_name');
        $excel_url = $this->request->param('excel_url');
        if(!empty($excel_name) && !empty($excel_url)){
            Loader::import('PHPExcel.Classes.PHPExcel');
            Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
            Loader::import('PHPExcel.Classes.PHPExcel.Reader.Excel5');
            $filename = ROOT_PATH.'public/upload/'.$excel_url;  //文件路径
            $extension = cmf_get_file_extension($excel_url);    //文件扩展名
            if($extension == 'xlsx'){
                $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
                $objPHPExcel = $objReader->load($filename, $encode = 'utf-8');  //加载文件内容,编码utf-8
            }else if($extension == 'xls'){
                $objReader =\PHPExcel_IOFactory::createReader('Excel5');
                $objPHPExcel = $objReader->load($filename, $encode = 'utf-8');  //加载文件内容,编码utf-8
            }else{
                $this->error('请上传Excel格式的文件!','');
            }
            $excel_array=$objPHPExcel->getsheet(0)->toArray();   //转换为数组格式
            array_shift($excel_array);  //删除第一个数组(标题);

            $data = [];
            foreach($excel_array as $k=>$v) {
                $data[$k]['user_login'] = $v[0];
                $data[$k]['user_pass'] = $v[1];
                $data[$k]['user_email'] = $v[2];
                $data[$k]['create_time'] = time();
                $data[$k]['user_type'] = 3;
                $validate = Loader::validate('Excel');
                if(!$validate->check($data[$k])){
                    $this->error('第'.($k+2).'行'.' '.$validate->getError(),'');
                }
                $data[$k]['user_pass'] = cmf_password($v[1]);
            }
            if(Db::name('user')->insertAll($data)){
                $this->success('导入数据成功!',url('user/AdminIndex/index'));
            } else {
                $this->error('导入数据失败!','');
            }
        }else{
            $this->error('文件导入失败!','');
        }
    }
}

Html

<form method="post" class="form-horizontal js-ajax-form margin-top-20" action="{:url('user/AdminIndex/excelAddUser')}">
   <div class="form-group">
      <label for="input-user_login" class="col-sm-2 control-label"><span class="form-required">*</span>Excel导入用户</label>
      <div class="col-md-6 col-sm-10">
         <!--<input  type="file" name="excel">-->
         <input id="excel-1" type="hidden" name="excel_url" >
         <input  id="excel-1-name" type="text" name="excel_name" title="Excel名称">
         <a href="javascript:uploadOne('Excel上传','#excel-1','file');" class="btn btn-sm btn-default">Excel文件上传</a>
      </div>
   </div>
   <div class="form-group">
      <div class="col-sm-offset-2 col-sm-10">
         <button type="submit" class="btn btn-primary js-ajax-submit">导入</button>
      </div>
   </div>
</form>

Validate

class ExcelValidate extends Validate
{
    protected $rule = [
        'user_login' => 'require|unique:user,user_login',
        'user_pass'  => 'require',
        'user_email' => 'require|email|unique:user,user_email',
    ];
    protected $message = [
        'user_login.require' => '用户不能为空',
        'user_login.unique'  => '用户名已存在',
        'user_pass.require'  => '密码不能为空',
        'user_email.require' => '邮箱不能为空',
        'user_email.email'   => '邮箱不正确',
        'user_email.unique'  => '邮箱已经存在',
    ];
}

应该还有很多可以优化的地方

猜你喜欢

转载自blog.csdn.net/qq_39197402/article/details/81261303
今日推荐