數據導入,在很多地方都會有需要,如何使用thinkphp5.1制作數據導入,接下來小編帶大家去了解整個過程。
1 準備工作
小編是通過PHPExcel實現數據導入的,所以在制作之前首先需要下載PHPExcel相關組件,目前tp5.1支持composer安裝,小編就是通過composer安裝的PHPExcel組件。【推薦:thinkphp視頻教程】
在安裝之前首先需要確定自己的電腦上有composer組件,如果還沒有安裝?Composer,在?linux?和?Mac OS X?中可以運行如下命令:
curl?-sS?https://getcomposer.org/installer?|?php mv?composer.phar?/usr/local/bin/composer
在 windows 中,你需要下載并運行?Composer-Setup.exe,下載地址:
立即學習“PHP免費學習筆記(深入)”;
安裝好composer之后,就是安裝PHPExcel了,win+R,打開運行界面,輸入cmd,進入管理界面,輸入你的項目所在的盤符(此處以D盤為例,項目在D:phpstudy_proWWWmyapp.io),然后點擊回車:
輸入:cd?D:phpstudy_proWWWmyapp.io,定位到項目所在目錄
接下來就是安裝PHPExcel插件,輸入:composer require phpoffice/phpexcel,點擊回車,即可開始安裝PHPExcel。
2 前端提交頁面
html
js
<script> layui.use(['form', 'layer','upload'], function () { $ = layui.jquery; var form = layui.form , layer = layui.layer; var $ = layui.jquery, upload = layui.upload; upload.render({ elem: '#test3' ,url: '你的上傳路徑' ,accept: 'file' //普通文件 ,exts: 'xls|xlsx' ,size:'10240' ,done: function(res){ $('#test3').append('<input type="text" name="file" id="file" lay-verify="file" value="'+res.data +'" />') } }); //監聽提交 form.on('submit(add)', function(data){ console.log(data); //發異步,把數據提交給php $.post('{:url('saveImportMember')}',$('form').serialize(),function(data){ if(data.res == 1){ layer.msg(data.msg); setTimeout(function(){parent.window.location.reload();},1000); }else if(data.res == 0){ layer.alert(data.msg,{icon: 2}); }else{ layer.alert('操作失敗',{icon: 2}); } }) return false; }); }); </script>
3 后臺處理
這里以上傳一張會員信息表為例,包含的字段值有:姓名(name)、性別(sex)、會員類型(type_id)、身份證號(identity)、會員編號(number)、聯系電話(telephone)、排序(sort)、會員狀態(status)。
//上傳excel文件 $file?=?Request::param('file'); //獲取文件路徑 $filePath?=?Env::get('root_path').'public'.DIRECTORY_SEPARATOR.$file; if($filePath?==?''){ ????return?['res'=>0,'msg'=>'你上傳的文件為空']; } $suffix?=?$this->DbSy->GetFileExt($file); //判斷哪種類型 if($suffix=="xlsx"){ ????$reader?=?PHPExcel_IOFactory::createReader('Excel2007'); }else{ ????$reader?=?PHPExcel_IOFactory::createReader('Excel5'); } //載入excel文件 $excel?=?$reader->load("$filePath",$encode?=?'utf-8'); //讀取第一張表 $sheet?=?$excel->getSheet(0); //獲取總行數 $row_num?=?$sheet->getHighestRow(); //獲取總列數 $col_num?=?$sheet->getHighestColumn(); $time?=?time(); $data?=?[];?//數組形式獲取表格數據 $count?=?0; $total?=?0; $error_count?=?0; for?($i?=?2;?$i?getCell("A".$i)->getValue(); ????$sex?=?$sheet->getCell("B".$i)->getValue(); ????$identity?=?$sheet->getCell("C".$i)->getValue(); ????$telephone?=?$sheet->getCell("F".$i)->getValue(); ????$data['sort']?=?$this->DbSy->getSort(5,'sort?desc',array('type_id'=>$type_id)); ????if(!$identity){ ????????return?['res'=>0,'msg'=>'身份證號不能為空']; ????} ????$data['identity']?=?$identity; ????if(!$name){ ????????return?['res'=>0,'msg'=>'姓名不能為空']; ????} ????$data['name']?=?$name; ????if($sex=='男'){ ????????$data['sex']?=?1; ????}elseif?($sex=='女'){ ????????$data['sex']?=?2; ????}else{ ????????$data['sex']?=?3; ????} ????$data['identity']?=?$identity; ????$data['number']?=?$this->DbSy->getNumber(5,'sort?desc',array('type_id'=>$type_id)); ??? ????if($telephone){ ????????$data['telephone']?=?$telephone; ????}else{ ????????$data['telephone']?=?''; ????} ????$data['status']?=?5; ????$member?=?$this->DbSy->FindWhere(5,array('name'=>$name,'identity'=>$identity,'type_id'=>$type_id)); ????if($member){ ????????/*$data['updatetime']?=?time();*/ ????????$info?=?$this->DbSy->editContent(5,$data,array('id'=>$member['id'])); ????????if($info){ ????????????$total++; ????????} ????}else{ ????????//?讀取單元格 ????????$data['addtime']?=?time(); ????????$data['updatetime']?=?time(); ????????$info?=?$this->DbSy->insertGetId(5,$data); ????????if($info){ ????????????$count++; ????????}else{ ????????????$error_count++; ????????} ????} } $msg?=??"成功導入".$count."條數據,重復".$total."條數據,導入失敗".$error_count."條數據"; if($count?>?0){ ????return?['res'=>1,'msg'=>$msg]; }else{ ????return?['res'=>0,'msg'=>$msg]; }