技术文摘

设计,技术,行业

php 用excel 批量导入数据

public function post(){
    if($this->request->isPost()){
        vendor("PHPExcel.PHPExcel");//导入PHPExcel.php
        $excel=$this->request->file("excel");
        if($excel == null){
            message("请先上传excel",'','error');
        }
        $path =   'uploads/' ;
        $info=$excel->move($path);//文件上传到项目目录
        $file_url=$info->getPathName();//这里获取到的是路径及文件名
        $file_name = $file_url;//文件名
        $extension = cmf_get_file_extension($file_name);//文件扩展名,这个方法自行处理,获取到文件后缀即可
        if($extension == 'xlsx'){
            $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
            $objPHPExcel = $objReader->load($file_url, $encode = 'utf-8');  //加载文件内容,编码utf-8
        }else if($extension == 'xls'){
            $objReader =\PHPExcel_IOFactory::createReader('Excel5');
            $objPHPExcel = $objReader->load($file_url, $encode = 'utf-8');  //加载文件内容,编码utf-8
        }else{
            message("请上传Excel格式的文件",'','error');
        }
        $excel_array=$objPHPExcel->getsheet(0)->toArray();   //转换为数组格式
        array_shift($excel_array);  //删除第一个数组(标题);
        $data = [];
        foreach($excel_array as $k=>$v) {
            $data[$k]['name'] = $v[0];
            $data[$k]['phone'] = $v[1];
            $data[$k]['address'] = $v[2];//因为表格只有三列,所有到这里就可以了,如果有多列,则继续往下增加即可
        }
        unset($info);//释放资源
        unlink($file_url);//因为之前使用的是上传的文件进行操作,这里把它删除,看个人情况具体处理
        if(Db::name('message')->insertAll($data)){
            message("导入成功",'reload','success');
        } else {
            message("导入失败",'','error');
        }
    }
    return $this->fetch();
}