ThinkPhp5.1 + PHPExcel制作數據導入

數據導入,在很多地方都會有需要,如何使用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免費學習筆記(深入)”;

thinkphp視頻教程

安裝好composer之后,就是安裝PHPExcel了,win+R,打開運行界面,輸入cmd,進入管理界面,輸入你的項目所在的盤符(此處以D盤為例,項目在D:phpstudy_proWWWmyapp.io),然后點擊回車:

ThinkPhp5.1 + PHPExcel制作數據導入

輸入:cd?D:phpstudy_proWWWmyapp.io,定位到項目所在目錄

ThinkPhp5.1 + PHPExcel制作數據導入

接下來就是安裝PHPExcel插件,輸入:composer require phpoffice/phpexcel,點擊回車,即可開始安裝PHPExcel。

2 前端提交頁面

html


???? ????

????????

???????????? ????????

????

????

????????

???????????? ????????

????

????

????????

????????????

????????????????注: ????????????????

1.文件大小:請上傳小于10M的文件

????????????????

2.文件類型:上傳時首先 ???????????????????? ????????????????下載導入模板 ????????????,填好信息后上傳

????????????

????????

????

js

<script>     layui.use([&#39;form&#39;, &#39;layer&#39;,&#39;upload&#39;], function () {         $ = layui.jquery;         var form = layui.form             , layer = layui.layer;          var $ = layui.jquery,             upload = layui.upload;          upload.render({             elem: &#39;#test3&#39;             ,url: &#39;你的上傳路徑&#39;             ,accept: &#39;file&#39; //普通文件             ,exts: &#39;xls|xlsx&#39;             ,size:&#39;10240&#39;             ,done: function(res){                 $(&#39;#test3&#39;).append(&#39;<input type="text" name="file" id="file" lay-verify="file" value="&#39;+res.data +&#39;" />&#39;)             }         });         //監聽提交         form.on(&#39;submit(add)&#39;, function(data){             console.log(data);             //發異步,把數據提交給php             $.post(&#39;{:url(&#39;saveImportMember&#39;)}&#39;,$(&#39;form&#39;).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(&#39;操作失敗&#39;,{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'=&gt;0,'msg'=&gt;'你上傳的文件為空']; } $suffix?=?$this-&gt;DbSy-&gt;GetFileExt($file); //判斷哪種類型 if($suffix=="xlsx"){ ????$reader?=?PHPExcel_IOFactory::createReader('Excel2007'); }else{ ????$reader?=?PHPExcel_IOFactory::createReader('Excel5'); } //載入excel文件 $excel?=?$reader-&gt;load("$filePath",$encode?=?'utf-8'); //讀取第一張表 $sheet?=?$excel-&gt;getSheet(0); //獲取總行數 $row_num?=?$sheet-&gt;getHighestRow(); //獲取總列數 $col_num?=?$sheet-&gt;getHighestColumn(); $time?=?time(); $data?=?[];?//數組形式獲取表格數據 $count?=?0; $total?=?0; $error_count?=?0; for?($i?=?2;?$i?getCell("A".$i)-&gt;getValue(); ????$sex?=?$sheet-&gt;getCell("B".$i)-&gt;getValue(); ????$identity?=?$sheet-&gt;getCell("C".$i)-&gt;getValue(); ????$telephone?=?$sheet-&gt;getCell("F".$i)-&gt;getValue(); ????$data['sort']?=?$this-&gt;DbSy-&gt;getSort(5,'sort?desc',array('type_id'=&gt;$type_id)); ????if(!$identity){ ????????return?['res'=&gt;0,'msg'=&gt;'身份證號不能為空']; ????} ????$data['identity']?=?$identity; ????if(!$name){ ????????return?['res'=&gt;0,'msg'=&gt;'姓名不能為空']; ????} ????$data['name']?=?$name; ????if($sex=='男'){ ????????$data['sex']?=?1; ????}elseif?($sex=='女'){ ????????$data['sex']?=?2; ????}else{ ????????$data['sex']?=?3; ????} ????$data['identity']?=?$identity; ????$data['number']?=?$this-&gt;DbSy-&gt;getNumber(5,'sort?desc',array('type_id'=&gt;$type_id)); ??? ????if($telephone){ ????????$data['telephone']?=?$telephone; ????}else{ ????????$data['telephone']?=?''; ????} ????$data['status']?=?5; ????$member?=?$this-&gt;DbSy-&gt;FindWhere(5,array('name'=&gt;$name,'identity'=&gt;$identity,'type_id'=&gt;$type_id)); ????if($member){ ????????/*$data['updatetime']?=?time();*/ ????????$info?=?$this-&gt;DbSy-&gt;editContent(5,$data,array('id'=&gt;$member['id'])); ????????if($info){ ????????????$total++; ????????} ????}else{ ????????//?讀取單元格 ????????$data['addtime']?=?time(); ????????$data['updatetime']?=?time(); ????????$info?=?$this-&gt;DbSy-&gt;insertGetId(5,$data); ????????if($info){ ????????????$count++; ????????}else{ ????????????$error_count++; ????????} ????} } $msg?=??"成功導入".$count."條數據,重復".$total."條數據,導入失敗".$error_count."條數據"; if($count?&gt;?0){ ????return?['res'=&gt;1,'msg'=&gt;$msg]; }else{ ????return?['res'=&gt;0,'msg'=&gt;$msg]; }

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享