数据导入,在很多地方都会有需要,如何使用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免费学习笔记(深入)”;
https://www.kancloud.cn/manual/thinkphp5_1/353948
安装好composer之后,就是安装PHPExcel了,win+R,打开运行界面,输入cmd,进入管理界面,输入你的项目所在的盘符(此处以D盘为例,项目在D:\phpstudy_pro\WWW\myapp.io),然后点击回车:

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

接下来就是安装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中文网其它相关文章!
全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号