Thinkphp PHPExcel批量导入数据到数据库

2 篇文章 0 订阅

1.首先把PHPExcel 文件夹复制到thinkphp/library/vendor目录下,

1.1 excel 文件数据格式如下:

  
ID姓名密码年龄地址
1xhz112320浙江省杭州市余杭区
2xhz212320浙江省杭州市余杭区
3xhz312320浙江省杭州市余杭区
4xhz412320浙江省杭州市余杭区
5xhz512320浙江省杭州市余杭区
6xhz612320浙江省杭州市余杭区
7xhz712320浙江省杭州市余杭区
8xhz812320浙江省杭州市余杭区
9xhz912320浙江省杭州市余杭区
10xhz1012320浙江省杭州市余杭区

1.2控制器的插入数据库的方法如下:

function insertToDb(){
        if (!empty($_FILES)) {
            $upload = new \Think\Upload();// 实例化上传类
            $filepath='./Upload/Excle/';
            $upload->exts = array('xlsx','xls');   // 设置附件上传类型
            $upload->rootPath  = $filepath;     // 设置附件上传根目录
            $upload->autoSub   =  false;        //自动使用子目录保存上传文件

            if (!$info=$upload->upload()) {
                $this->error($upload->getError());
            }
            foreach ($info as $k => $v) {
                unset($info);
                $info[0]=$v;
                $info[0]['savepath']=$filepath;
            }

            vendor("PHPExcel.PHPExcel");
            vendor("PHPExcel.PHPExcel.IOFactory");

            $file_name=$info[0]['savepath'].$info[0]['savename'];
            $extension = strtolower( pathinfo($file_name, PATHINFO_EXTENSION) );
            if ($extension == 'xlsx') {
                $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
                $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');
            } else if ($extension == 'xls'){
                $objReader =\PHPExcel_IOFactory::createReader('Excel5');
                $objPHPExcel =$objReader->load($file_name, $encode = 'utf-8');
            }
            $sheet = $objPHPExcel->getSheet(0);
            $highestRow = $sheet->getHighestRow(); // 取得总行数
//            $highestColumn = $sheet->getHighestColumn(); // 取得总列数
            $j=0;
            for($i=2;$i<=$highestRow;$i++){
                $data['username']= $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
                $data['password']= $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
                $data['age']= $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
                $data['address']= $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
                if(D('admin')->where("id='".$data['id']."'")->find()){
                    $this->error("有相同的ID");
                }else{
                    M('admin')->add($data);
                    $j++;
                }
            }
            $this->success('导入成功!本次导入数量:'.$j);
        }else{
            $this->display();
        }
    }

1.3 数据库数据如下:

271 xhz1 123 20 浙江省杭州市余杭区
272 xhz2 123 20 浙江省杭州市余杭区
273 xhz3 123 20 浙江省杭州市余杭区
274 xhz4 123 20 浙江省杭州市余杭区
275 xhz5 123 20 浙江省杭州市余杭区
276 xhz6 123 20 浙江省杭州市余杭区
277 xhz7 123 20 浙江省杭州市余杭区
278 xhz8 123 20 浙江省杭州市余杭区
279 xhz9 123 20 浙江省杭州市余杭区
280 xhz10 123 20 浙江省杭州市余杭区


2. 这样就可以导入到数据库了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些相关的参考资料。 首先,您需要在前端页面中创建一个上传文件的表单,代码如下: ```html <form class="layui-form" action="" method="post" enctype="multipart/form-data"> <div class="layui-form-item"> <div class="layui-upload"> <button type="button" class="layui-btn layui-btn-normal" id="btnUpload">上传Excel文件</button> <input type="file" name="file" id="file" style="display:none"> </div> </div> </form> ``` 然后,在前端页面中引入Layui和jQuery库,并使用Layui的上传插件实现文件上传,代码如下: ```javascript layui.use(['upload'], function () { var upload = layui.upload; //执行实例 var uploadInst = upload.render({ elem: '#btnUpload' //绑定元素 , url: '/index.php/index/upload' //上传接口 , accept: 'file' , exts: 'xls|xlsx' , done: function (res) { if (res.code == 0) { layer.msg('上传成功'); //成功后重新加载数据 loadData(); } else { layer.msg('上传失败:' + res.msg); } } , error: function () { //请求异常回调 layer.msg('上传失败'); } }); }); ``` 接下来,在后端使用ThinkPHP框架解析Excel文件,并将数据批量插入数据库中,代码如下: ```php public function upload() { //获取上传文件 $file = request()->file('file'); if ($file) { //移动文件到服务器临时目录 $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'); if ($info) { //解析Excel文件 vendor('phpoffice.phpexcel.Classes.PHPExcel'); $objPHPExcel = \PHPExcel_IOFactory::load($info->getPathname()); $sheet = $objPHPExcel->getSheet(0); $highestRow = $sheet->getHighestRow(); //获取总行数 $highestColumn = $sheet->getHighestColumn(); //获取总列数 //批量插入数据 $data = []; $time = time(); for ($i = 2; $i <= $highestRow; $i++) { $row = $sheet->rangeToArray('A' . $i . ':' . $highestColumn . $i, NULL, TRUE, FALSE); $data[] = [ 'username' => $row[0][0], 'email' => $row[0][1], 'create_time' => $time, ]; } Db::name('user')->insertAll($data); //返回JSON数据 return json([ 'code' => 0, 'msg' => '上传成功', ]); } else { //上传失败 return json([ 'code' => 1, 'msg' => $file->getError(), ]); } } else { //未选择文件 return json([ 'code' => 1, 'msg' => '请选择上传文件', ]); } } ``` 最后,在前端页面中使用jQuery的ajax请求上传文件,并刷新数据显示。代码如下: ```javascript //重新加载数据 function loadData() { $.ajax({ url: '/index.php/index/index', dataType: 'json', success: function (res) { var html = ''; layui.each(res.data, function (index, item) { html += '<tr>'; html += '<td>' + item.id + '</td>'; html += '<td>' + item.username + '</td>'; html += '<td>' + item.email + '</td>'; html += '</tr>'; }); $('#data').html(html); } }); } //上传文件 $('#btnUpload').click(function () { var formData = new FormData($('form')[0]); $.ajax({ url: '/index.php/index/upload', type: 'post', data: formData, cache: false, contentType: false, processData: false, dataType: 'json', success: function (res) { if (res.code == 0) { layer.msg('上传成功'); //成功后重新加载数据 loadData(); } else { layer.msg('上传失败:' + res.msg); } }, error: function () { //请求异常回调 layer.msg('上传失败'); } }); }); ``` 以上就是一个基于Layui和ThinkPHP批量导入Excel文件的实现示例,希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值