hello,大家好,好长时间没有更新文章了。最近一直在忙着做项目。所以断更了。
 那么好,各位老铁是否想要实现导入导出的功能 请关注我,解密如何实现导入导出,
 那么今天先来讲一下用thinkphp5.0 如何实现Excel表格导入数据到数据库
 1.前提准备:
 正常的流程是前端客户端上传excel文件到服务器上,然后通过代码解析解码然后存入到数据库里。
 这里我们用到一个依赖叫phpExcle依赖。github下载地址:https://github.com/PHPOffice/PHPExcel
 下载之后我们讲Classes目录解压出来放到我们tp5框架里面的vendor目录下,并改名为:PHPExcel
 
 2.使用PHPExcel
 在你使用的这个方法下或者是你可以封装一下,放到model里
/**
     * 获取excel文件后缀名
     */
    public function get_excel_name($filename){
        $arr = explode('.',$filename);
        return array_pop($arr);
    }
    /** excel导入数据*/
    public function import_excel_data(){
        vendor("PHPExcel.PHPExcel");
        $objPHPExcel =new \PHPExcel();
        $file = $this->request->file('file');
        $info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public/uploads/excel');  //上传验证后缀名,以及上传之后移动的地址
        if($info)
        {
            $exclePath = $info->getSaveName();  //获取文件名
            $file_name = ROOT_PATH . 'public/uploads/excel/' . DS . $exclePath;//上传文件的地址
            $name =  $this->get_excel_name($file_name);
            if($name ==='xlsx' ){
                $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
            }else {
                $objReader =\PHPExcel_IOFactory::createReader('Excel5');
            }
            $obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8');  //加载文件内容,编码utf-8
            $excel_array=$obj_PHPExcel->getSheet(0)->toArray();   //转换为数组格式
            array_shift($excel_array);  //删除第一个数组(标题);
            $city = [];
            $i=0;
            foreach($excel_array as $k=>$v) {
                $city[$k]['keyword']   = isset($v[0])?$v[0]:"无";
                $i++;
            }
            $count=db('auto_keyword')->insertAll($city);
            $data = [
                'count'=>$count
            ];
            $this->success('ok',$data);
        }else
        {
            $this->error($file->getError());
        }
    }
在这里我们需要改几个文件:
 PHPExcel/PHPExcel/Shared/String.php下面的“utf16_decode”方法,把{0}、{1}改成[0]、[1]
 PHPExcel/PHPExcel/ReferenceHelper.php下面的“updateSingleCellReference”方法,把{0}、{1}改成[0]、[1]
 PHPExcel/PHPExcel/Cell.php下面的“columnIndexFromString”方法,把{0}、{1}改成[0]、[1]
 3.本地请求结果如下:
  4.数据库和excel文件数据对比一下
4.数据库和excel文件数据对比一下
 这两张表对比一下,然后再看上面的代码就更好操作了。这里的数据库的主键是自动递增的。其他的数据一一对应就OK了。
 1>.这是excel表里的数据
  2>.这是数据库里的数据
2>.这是数据库里的数据
 
好了。导入就讲到这里了。有用的小伙伴记得收藏关注我。这段代码亲测有效哦!











![责任链设计模式(Chain of Responsibility Pattern)[论点:概念、组成角色、图示、相关代码、框架中的运用、适用场景]](https://img-blog.csdnimg.cn/39f8d82ec1fa4c6b9a0663c1f5f84eff.png)







