08
2019
05

【教程】layui上传Excel并读取

1html部分

上传按钮

<button class="layui-btn layui-btn-sm" lay-submit="" lay-filter="go7" id="go7">上传成绩模板</button>

2js部分

var upload = layui.upload;
   
  //执行实例
  var uploadInst = upload.render({
    elem: '#go7' //绑定元素
    ,url: 'uploadExcel.php' //上传接口
		,accept: "file"
		,exts: 'xls|excel|xlsx'
    ,done: function(res){
      //上传完毕回调
			// console.log(res.data[1][2]);
			
			for(i=1;i<res.data.length;i++){
				$('input[name="txta'+i+'"]').val(res.data[i][2]==null?'':res.data[i][2]);
				$('input[name="txtb'+i+'"]').val(res.data[i][3]==null?'':res.data[i][3]);
				$('input[name="txtc'+i+'"]').val(res.data[i][4]==null?'':res.data[i][4]);
				$('input[name="txtd'+i+'"]').val(res.data[i][5]==null?'':res.data[i][5]);
				$('input[name="txte'+i+'"]').val(res.data[i][6]==null?'':res.data[i][6]);
				$('input[name="txtf'+i+'"]').val(res.data[i][7]==null?'':res.data[i][7]);
				$('input[name="txtg'+i+'"]').val(res.data[i][8]==null?'':res.data[i][8]);
			}
			// console.log($('input[name="txta1"]').val());
			layer.msg('上传成功,请先计算总评,再保存',{time:6000});
    }
    ,error: function(){
      //请求异常回调
			layer.msg("模板格式不正确");
    }
  });

3php部分

uploadExcel.php文件

<?php
addExcel();
//接收前台文件
function addExcel()
{
	//接收前台文件
	$ex = $_FILES['file'];
	//重设置文件名
	$filename = time() . substr($ex['name'], stripos($ex['name'], '.'));
	$path = 'upload/' . $filename;//设置移动路径
	move_uploaded_file($ex['tmp_name'], $path);
	//表用函数方法 返回数组
	$exfn = _readExcel($path); // 读取内容
	upload_file($exfn, $path); // 上传数据 
}

//创建一个读取excel数据,可用于入库
function _readExcel($path)
{
	//引用PHPexcel 类
	include_once('../inc/PHPExcel.php');
	include_once('../inc/PHPExcel/IOFactory.php');//静态类
	$type = 'Excel2007';//设置为Excel5代表支持2003或以下版本,Excel2007代表2007版
	$xlsReader = PHPExcel_IOFactory::createReader($type);
	$xlsReader->setReadDataOnly(true);
	$xlsReader->setLoadSheetsOnly(true);
	$Sheets = $xlsReader->load($path);
	//开始读取上传到服务器中的Excel文件,返回一个二维数组
	$dataArray = $Sheets->getSheet(0)->toArray();
	return $dataArray;
}

//将数据以json格式输出
function upload_file($data, $path)
{
	//global $db;
	$arr = array();
	array_push($arr, $data[0]);
	//删除第一项
	unset($data[0]);
	//$sql = 'insert into media_platform (user,phone,passwd,head,nickname,platform) values (?,?,?,?,?,?)';
	//$stmt = $db->prepare($sql);
	foreach ($data as $v) {
		//$result = $stmt->execute(array($v[0] ? $v[0] : '', $v[1] ? $v[1] : '', $v[2] ? $v[2] : '', $v[3] ? $v[3] : '', $v[4] ? $v[4] : '', $v[6] ? $v[6] : ''));
		// $stmts->execute(array($v[6] ? $v[6] : ''));
		//if (!$result) {
			array_push($arr, $v);
		//}
	}
// 返回json格式
// 	{
// 	  "code": 0
// 	  ,"msg": ""
// 	  ,"data": {
// 		"src": "http://cdn.layui.com/123.jpg"
// 	  }
// 	}
	$result=array("code"=>"0","msg"=>"","data"=>$arr);
	echo json_encode($result);
	unlink($path); // 上传完文件之后删除文件,避免造成垃圾文件的堆积
}

?>

其中,调用了PHPExcel插件,下载地址:

 https://github.com/PHPOffice/PHPExcel

在使用PHPExcel插件是会有一个报错,需要修改 PHPExcel\Reader\Excel2007.php文件,

在首行加入

date_default_timezone_set('PRC');//设置中国时区

参考文章:https://www.ermsg.com/post/10.html

参考文章:https://blog.csdn.net/weixin_43260760/article/details/83021626

打赏
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。