原创

thinkphp5、tp5中excel表格的导入数据库的实现示例


日常生活中,表格的导入很多!每次做导入的时候还需要百度一下,很麻烦!

这次稍微总结下方法吧!


本方法适用tp5.0框架

适用的方法也简单!希望对大家能有点帮助吧!

由于我这次本机的composer安装后需要重启,但是我电脑上的项目又特别赶时间,算了,还是老土办法吧!


下面开始上教程

1:下载PHPexcel包

    下载地址:https://github.com/PHPOffice/PHPExcel    点击下载zip包就可以了!

2:解压文件并重命名

    

3:上传到服务器的application目录下,具体如上图所示

4:创建导入的控制器,由于我这里是导入试题,所以我的控制器是exam。php

5:结合layui的上传插件,再控制器中实现数据的插入

/**
     * 新建试题
     */
    public function add()
    {
        require_once APP_PATH."myclass/PHPExcel/PHPExcel.php";
        require_once APP_PATH."myclass/PHPExcel/PHPExcel/IOFactory.php";
        require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel5.php";
        $file = request()->file('file');
        if($file){
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads/exam');
            $filename = $file->getInfo()["name"];
            $path = '/public/uploads/exam/'.$info->getSaveName();
            $objReader=\PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format

            $objPHPExcel=$objReader->load(".".$path);//$file_url即Excel文件的路径
            $sheet=$objPHPExcel->getSheet(0);//获取第一个工作表
            $highestRow=$sheet->getHighestRow();//取得总行数
            $highestColumn=$sheet->getHighestColumn(); //取得总列数



            $data = array();
            //循环读取excel文件,读取一条,插入一条
            for($j=2;$j<=$highestRow;$j++){
                //从第一行开始读取数据
                $str='';
                for($k='A';$k<=$highestColumn;$k++){            //从A列读取数据
                    //这种方法简单,但有不妥,以'\\'合并为数组,再分割\为字段值插入到数据库,实测在excel中,如果某单元格的值包含了\\导入的数据会为空
                    $str.=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//读取单元格
                }

                //explode:函数把字符串分割为数组。
                $strs=explode("\\",$str);
                $d["content"] = $strs[1];
                $d["A"] = $strs[2];
                $d["B"] = $strs[3];
                $d["C"] = $strs[4];
                $d["D"] = $strs[5];
                $d["answer"] = $strs[6];
                $d["add_time"] = time();

                array_push($data,$d);

            }
            $exam["title"] = $filename;
            $exam["add_time"] = time();
            $exam["question_count"] = count($data);
            $exam["every_question_score"] = 100/count($data);
            //试题名查重
            if(Db::name("exam")->where(["title"=>$filename])->find()){
                return json(["code"=>40000,"msg"=>"试卷名重复,请检查是否早已导入"]);
            }
            $exam_id = Db::name("exam")->insertGetId($exam);//试卷名的完善和导入
            foreach ($data as $k=> $v){
                $data[$k]["exam_id"] = $exam_id;
            }
            $res = Db::name("exam_questions")->insertAll($data);
            unlink(".".$path); //删除excel文件
            if($res){
                return json(["code"=>200,"msg"=>"导入成功"]);
            }else{
                return json(["code"=>40000,"msg"=>"导入失败"]);
            }

        }



        return $this->fetch();
    }
大家根据自己创建的文件目录去修改自己引入的excel的包路劲!


 require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel5.php";如果报错试试
 require_once APP_PATH."myclass/PHPExcel/PHPExcel/Reader/Excel2017.php";

其他报错可以参考
https://www.cnblogs.com/cqingt/p/5338023.html


代码下载地址【包含控制器文件】:
链接:https://pan.baidu.com/s/1Rvw4iSnM17NHEOA_CSS1ZA 密码:059h

本文由米醋儿网首发!转载请注明出处

留言反馈
问题反馈渠道,如有软件无法下载或者其他问题可反馈。【由于某种原因,目前留言不展示】
用户需要登录后才能留言反馈