您的位置 首页 php

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 | phpmv composer.phar /usr/local/bin/composer

在 Windows 中,你需要下载并运行 Composer-Setup.exe,下载地址:

https://www.kancloud.cn/manual/thinkphp5_1/353948

安装好composer之后,就是安装PHPExcel了,win+R,打开运行界面,输入cmd,进入管理界面,输入你的项目所在的盘符(此处以D盘为例,项目在D:\phpstudy_pro\WWW\myapp.io),然后点击回车:

1.png

输入:cd D:\phpstudy_pro\WWW\myapp.io,定位到项目所在目录

2.png

接下来就是安装PHPExcel插件,输入:composer require phpoffice/phpexcel,点击回车,即可开始安装PHPExcel。

2 前端提交页面

html

<form class="layui-form" enctype="multipart/form-data">    <input type="hidden" name="type_id" value="{$type_id}">    <div class="layui-form-item" style="margin-left: 42px;">        <div class="layui-input-inline" style="width: 122px;">            <button type="button" class="layui-btn" name="file" lay-verify="file" id="test3"><i class="layui-icon"></i>上传文件</button>        </div>    </div>    <div class="layui-form-item" style="margin-left: 42px;">        <div class="layui-input-inline">            <button  class="layui-btn" lay-filter="add" lay-submit="add">                导入            </button>        </div>    </div>    <div class="layui-form-item">        <div class="layui-input-block">            <div style="line-height: 35px;">                注:                <p>1.文件大小:请上传小于10M的文件</p>                <p>2.文件类型:上传时首先                    <span class="common-a">                <a href="/import/member.xlsx">下载导入模板</a>            </span>,填好信息后上传</p>            </div>        </div>    </div></form>

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 <= $row_num; $i ++) {    $type_id = Request::param('type_id');    $data['type_id'] = $type_id;    $name = $sheet->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];}

文章来源:智云一二三科技

文章标题:ThinkPhp5.1 + PHPExcel制作数据导入

文章地址:https://www.zhihuclub.com/23929.shtml

关于作者: 智云科技

热门文章

网站地图