• 技术文章 >php框架 >ThinkPHP

    ThinkPhp5.1 + PHPExcel制作数据导入

    XuPing.YangXuPing.Yang2022-02-17 10:11:05原创1444

    数据导入,在很多地方都会有需要,如何使用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,下载地址:

    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];
    }

    以上就是小编总结的利用TP5.1+PHPExcel制作信息导入的所有流程,希望对大家有所帮助。

    以上就是ThinkPhp5.1 + PHPExcel制作数据导入的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:ThinkPhp5.1 PHPExcel
    上一篇:ThinkPhp5.1 + jSignature实现在线签名功能 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ThinkPHP5框架中Redis是如何使用和封装?• ThinkPhp5.1制作微信支付以及支付后的几种状态说明• 一文详解Thinkphp5中怎么增删改查数据库• ThinkPhp5.1 + jSignature实现在线签名功能
    1/1

    PHP中文网