layui php+PHPExcel 拉取excel表格数据一键导入

该博客围绕大量数据导入数据库的需求展开,介绍了直接拉取Excel表格读取数据并存入数据库的方法,且不存储文件,利用上传缓存文件。同时给出了前端(layui+php)和服务端代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:大量数据需要导入数据库,直接拉取excel表格进行读取数据并存入数据库,过程中不对文件进行存储(使用上传过程中的缓存文件)。

前端代码(layui+php):

<?php
	if(!defined('MEMCACHE_HOST'))
	{
		define('MEMCACHE_HOST','1****5');
		define('MEMCACHE_PORT',1***2);
	}
	include_once('/opt*******memcache.php');
	$cpage	= 'add_uploads';
	$ask***_str	= M::Get('as***list');
	$ask_***_arr	= json_decode($ask_a***r,true);//获取客户名列表,存在缓存中
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<title>问答频道后台</title>
	<link rel="stylesheet" rev="stylesheet" href="http://www.qubaobei.com/badmin/city/style/style.css?v=4" type="text/css" />
	<link rel="stylesheet" href="//www.qubaobei.com/kadmin/zlmm/static/admin/lib/layui/css/layui.css" id="layui">
	<style type="text/css">
	a:visited {
		color: #fff;
		text-decoration: none;
	}
	a:link {
		color: #fff;
		text-decoration: none;
	}
	</style>
</head>
<body>
<?php include_once('global/nav.php');?>
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
  <legend>客户批量问题一键导入</legend>
</fieldset> 
<form class="layui-form" action="">
	<div class="layui-form-item">
		<label class="layui-form-label">类型</label>
		<div class="layui-input-inline" style="width: 115px">
			<input type="checkbox" name="base" lay-skin="switch" lay-filter="base" lay-text="新增|选择">
		</div>
		<div id="base" style="display: none;">
			<div class="layui-input-inline" style="width: 100px">
				<input type="text" id="new_ad" name="new_ad" style="width: 100px" class="layui-input" value="" placeholder="客户名">
			</div>
		</div>
		<div class="layui-input-inline" style="padding: 9px 15px;line-height: 20px;">
			<a class="layui-btn layui-btn-xs"  href="./document/template.xlsx" download="">导入数据表格模板下载</a>
		</div>
	</div>
	<div class="layui-form-item" id="base_1">
		<label class="layui-form-label">客户名</label>
		<div class="layui-input-block" style="width: 700px">
		<?php foreach($ask_adv_post_cat_arr as $v):?>
			<input type="radio" lay-filter="ad_id" name="cate" value="<?php echo $v['cat_id'];?>" title="<?php echo $v['new_ad'];?>">
		<?php endforeach;?>
		</div>
	</div>
	<div class="layui-form-item">
		<label class="layui-form-label">文件上传</label>
		<div class="layui-upload-drag" id="test10">
		  <i class="layui-icon"></i>
		  <p>点击上传,或将文件拖拽到此处</p>
		</div>
	</div>
</form>
<!-- 上传完之后服务器返回链接 -->
<div style="overflow-y:auto; overflow-x:auto;  width:450px; height:600px; position: fixed;right: 30px;top: 100px;">
<table class="layui-table">
  <colgroup>
    <col width="200"><col>
  </colgroup>
  <thead>
    <tr>
      <th>链接</th>
    </tr> 
  </thead>
  <tbody id="url_list">

  </tbody>
</table>
</div>
</body>

<script src="//www.qubaobei.com/kadmin/zlmm/static/admin/lib/layui/layui.js"></script>
<script>

  layui.use(['upload','jquery','form'], function () {
    var $ = layui.jquery,
		form  = layui.form,
		upload = layui.upload;

	var cat_id=0,new_ad='';
    //监听开关操作
	form.on('switch(base)', function(data){
		var obj    = $(data.elem);
		var change = this.checked
		if(change){
			$('#base').show();
			$('#base_1').hide();
			$('#new_ad').val('');
			new_ad = '';
		}else{
			$('#base').hide();
			$('#base_1').show();
			$('#new_ad').val('');
			new_ad = '';
		}
	});
    //由于不使用表单提交,监听单选项值
	form.on('radio(ad_id)', function(data){
		cat_id = data.value;
	}); 
	//获取新增客户名
	$('#new_ad').blur(function(){
		new_ad = $('#new_ad').val();

	});
	//拖拽上传(不可以直接使用默认data形式!!由于是reder在一开始就确定了data值,所以需要在befor中重定义data。)
	upload.render({
		elem: '#test10'
		,url: 'sub/ask_adv.php'
		,accept: 'file' //普通文件
		,before: function(obj){ //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
			this.data = {
						  method: 'one_button_import',
						  cat_id:cat_id,
						  new_ad:new_ad
						}
		}
		,done: function(res){
			if(res.ret==1){
				var i = layer.msg(res.msg,{time: 500},function(){ layer.close(i);});
				res.data.forEach(function(v){  
					var str="<tr><td>"+v[1]+"</td></tr>";
					$("#url_list").append(str);
				});
			}else{
				var index = layer.alert(res.msg,{icon:2},function(){ layer.close(index);});
			}

		}
	});
});
</script>

服务端代码:

//导入PHPExcel类文件(git:https://github.com/PHPOffice/PHPExcel,压缩文件:https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8)

include_once("../util/PHPExcel/Classes/PHPExcel/IOFactory.php");
include_once("../util/PHPExcel/Classes/PHPExcel.php");


	//自动化一键导入
	public function one_button_import(){
		$file	= $_FILES['file'];//获取上传的文件
		$cate	= isset($this->get['cat_id'])?$this->get['cat_id']:0;//获取额外的数据
		$new_ad	= isset($this->get['new_ad'])?$this->get['new_ad']:'';
		if(!$cate && !$new_ad){
			$data['ret']=0;
			$data['msg']='未选择分类或未新增';
			echo json_encode($data);die;

		}
        //新增客户选项
		if(!$cate && $new_ad){
            //查找库中目前最大客户id值
			$sql	= "select max(cat) as max_cat from `ask_post` where `state`=1 limit 1";
			$max_cat= $this->ms->getRow($sql);
			$cate	= (int)$max_cat['max_cat']+1;
			//保存分类到缓存
			$ask_adv_post_cat_str	= M::Get('ask****_list');
			$ask_adv_post_cat_arr	= json_decode($ask_adv_post_cat_str,true);
			$new_quit	= array('cat_id'=>$cate,'new_ad'=>$new_ad);
			$ask_adv_post_cat_arr[]	= $new_quit;
			//$ask_adv_post_cat_arr	= array(array('cat_id'=>9999,'new_ad'=>'伊***品线'));
			$str = json_encode($ask_adv_post_cat_arr);
			M::Set('ask_****_list',$str);
			//文件记录,以防缓存丢失
			$log_str = '=========='.date('Y-m-d H:i:s').'=========='.PHP_EOL.var_export($ask_adv_post_cat_arr,true).PHP_EOL;
			file_put_contents('/o*******/log/ask_ad_cat_post.txt',$log_str,FILE_APPEND);
		}
        //使用缓存文件
		$inputFileName = $file['tmp_name'];
		//读取excel文件
		try {
			$inputFileType	= PHPExcel_IOFactory::identify($inputFileName);
			$objReader		= PHPExcel_IOFactory::createReader($inputFileType);
			$objPHPExcel	= $objReader->load($inputFileName);
		} catch(Exception $e) {
			die('加载文件发生错误:”'.pathinfo($inputFileName,PATHINFO_BASENAME).'”: '.$e->getMessage());
		}
        //形成数组
		$excel_data = $objPHPExcel->getSheet(0)->toArray();
		$url_list = array();
		foreach($excel_data as $k=>$v){
			if($k>0){
				//入库
				$post_id = $this->add_advice_post($v[0],$v[1],1,$cate);
				if($post_id){
					$url_list[] = array($v[0],"http:********e/detail.php?id=".$post_id);
				}else{
					die;
				}
			}
		}
		if($url_list){
			$data['ret']=1;
			$data['msg']='导入成功';
			$data['data']=$url_list;
		}else{
			$data['ret']=1;
			$data['msg']='导入失败,联系程序员';
		}
		echo json_encode($data);die;
	}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值