首页 > php框架 > ThinkPHP > ThinkPhp5.1 + PHPExcel制作数据导入

ThinkPhp5.1 + PHPExcel制作数据导入

XuPing.Yang
发布: 2022-02-17 10:11:05
原创
2557 人浏览过

数据导入,在很多地方都会有需要,如何使用ThinkPhp5.1制作数据导入,接下来小编带大家去了解整个过程。

1 准备工作

小编是通过PHPExcel实现数据导入的,所以在制作之前首先需要下载PHPExcel相关组件,目前tp5.1支持composer安装,小编就是通过composer安装的PHPExcel组件。【推荐:thinkphp视频教程

在安装之前首先需要确定自己的电脑上有composer组件,如果还没有安装 Composer,在 Linux 和 Mac OS X 中可以运行如下命令:

1

2

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

<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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

<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)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

//上传excel文件

$file = Request::param(&#39;file&#39;);

//获取文件路径

$filePath = Env::get(&#39;root_path&#39;).&#39;public&#39;.DIRECTORY_SEPARATOR.$file;

if($filePath == &#39;&#39;){

    return [&#39;res&#39;=>0,&#39;msg&#39;=>&#39;你上传的文件为空&#39;];

}

$suffix = $this->DbSy->GetFileExt($file);

//判断哪种类型

if($suffix=="xlsx"){

    $reader = \PHPExcel_IOFactory::createReader(&#39;Excel2007&#39;);

}else{

    $reader = \PHPExcel_IOFactory::createReader(&#39;Excel5&#39;);

}

//载入excel文件

$excel = $reader->load("$filePath",$encode = &#39;utf-8&#39;);

//读取第一张表

$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(&#39;type_id&#39;);

    $data[&#39;type_id&#39;] = $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[&#39;sort&#39;] = $this->DbSy->getSort(5,&#39;sort desc&#39;,array(&#39;type_id&#39;=>$type_id));

    if(!$identity){

        return [&#39;res&#39;=>0,&#39;msg&#39;=>&#39;身份证号不能为空&#39;];

    }

    $data[&#39;identity&#39;] = $identity;

    if(!$name){

        return [&#39;res&#39;=>0,&#39;msg&#39;=>&#39;姓名不能为空&#39;];

    }

    $data[&#39;name&#39;] = $name;

    if($sex==&#39;男&#39;){

        $data[&#39;sex&#39;] = 1;

    }elseif ($sex==&#39;女&#39;){

        $data[&#39;sex&#39;] = 2;

    }else{

        $data[&#39;sex&#39;] = 3;

    }

    $data[&#39;identity&#39;] = $identity;

    $data[&#39;number&#39;] = $this->DbSy->getNumber(5,&#39;sort desc&#39;,array(&#39;type_id&#39;=>$type_id));

    

    if($telephone){

        $data[&#39;telephone&#39;] = $telephone;

    }else{

        $data[&#39;telephone&#39;] = &#39;&#39;;

    }

    $data[&#39;status&#39;] = 5;

    $member = $this->DbSy->FindWhere(5,array(&#39;name&#39;=>$name,&#39;identity&#39;=>$identity,&#39;type_id&#39;=>$type_id));

    if($member){

        /*$data[&#39;updatetime&#39;] = time();*/

        $info = $this->DbSy->editContent(5,$data,array(&#39;id&#39;=>$member[&#39;id&#39;]));

        if($info){

            $total++;

        }

    }else{

        // 读取单元格

        $data[&#39;addtime&#39;] = time();

        $data[&#39;updatetime&#39;] = time();

        $info = $this->DbSy->insertGetId(5,$data);

        if($info){

            $count++;

        }else{

            $error_count++;

        }

    }

}

$msg "成功导入".$count."条数据,重复".$total."条数据,导入失败".$error_count."条数据";

if($count > 0){

    return [&#39;res&#39;=>1,&#39;msg&#39;=>$msg];

}else{

    return [&#39;res&#39;=>0,&#39;msg&#39;=>$msg];

}

登录后复制

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

以上是ThinkPhp5.1 + PHPExcel制作数据导入的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板