基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能


Posted in PHP onJanuary 24, 2017

思路:

1.首先,页面前端,上传附件,提交给后台,并带一个随机性的参数(可以用时间戳);

2.后端接收附件,做一系列的逻辑处理,无误后,将对应的文件存储在上传的目录下;

3.然后前端,上传附件成功后,进行请求后端,读取数据,后端接口对应将附件数据读取出来,前端进行显示(ajax请求);

4.前端展示数据,用户对数据检测无误,点击保存(ajax请求后端保存代码的接口),当然也可以有选择性的选择某些数据记录进行保存,楼主这里做的是全部保存(后端处理接口,自动过滤重复数据);

5.拿到对应的所需有用数据即可, 对应的excel表格,因为需要获取到人员排期数据,所以楼主是通过判断单元格的背景色来识别

代码如下:(关键代码)

前端 对应html:

<!--导入数据操作层-->
<div id="import" class="modal fade bs-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 <div class="modal-dialog modal-lg">
 <div class="modal-content">
  <div class="modal-header bg-primary">
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  <h4 class="modal-title">文件导入</h4>
  </div>
  <div class="modal-body">
  <div style="text-align:right;padding:5px">
   <a href="/public/uploadFile/人员资源动态匹配表-模板.xlsx" onclick="javascript:;">
   <img alt="人员资源动态匹配表-模板" src="/public/images/excel.jpg" />
   <span style="font-size:larger;font-weight:200;color:red">人员资源动态匹配表-模板.xlsx</span>
   </a>
  </div>
  <hr/>
  <form id="ffImport" method="post">
   <div title="Excel导入操作" style="padding: 5px" data-options="iconCls:'icon-key'">
   <input class="easyui-validatebox" type="hidden" id="AttachGUID" name="AttachGUID" /> 
   <input id="file_upload" name="file_upload" type="file" multiple="multiple">   
   <a href="javascript:;" class="btn btn-primary" id="btnUpload" onclick="javascript: $('#file_upload').uploadify('upload', '*')">上传</a>
   <a href="javascript:;" class="btn btn-default" id="btnCancelUpload" onclick="javascript: $('#file_upload').uploadify('cancel', '*')">取消</a>
   <div id="fileQueue" class="fileQueue"></div>
   <br />   
   <hr style="width:98%" />   
   <div id="div_files"></div>
   <br />   
   </div>
  </form>
  <!--数据显示表格-->
  <table id="gridImport" class="table table-striped table-bordered table-hover" cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
   <thead id="gridImport_head">
   <tr>
    <th>项目名称</th>
    <th>项目编号</th>
    <th>功 能</th>
    <th>人 员</th>
    <th>日 期</th>
   </tr>
   </thead>
   <tbody id="gridImport_body"></tbody>
  </table>
  </div>
  <div class="modal-footer">
  <button type="button" class="btn btn-default" data-dismiss="modal" id="close_window">关闭</button>
  <button type="button" class="btn btn-primary" onclick="javascript:SaveImport();">保存</button>
  </div>
 </div>
 </div>
</div>

对应js代码:

<script type="text/javascript">
 //保存导入的数据
 function SaveImport(){
 var guid = $("#AttachGUID").val();
 if (guid == '' || typeof guid == 'undefined') {
  alert('请先上传excel文件!');
  return false;
 }
 $.ajax({
  url: '/lazy/CheckExcelColumns?type=save&guid=' + guid,
  type: 'get',
  dataType: 'json',
  success: function (data) {
  alert(data.msg);
  $('#close_window').click();
  console.log('报存数据成功!');
  },
  error:function(){
  console.log('出错了!');
  }
 });
 }
 $(function(){
 //导入层的js
 $("#import_schedule").bind('click', function(){
  $("#gridImport_body").html("");
  $("#import").modal("show");
 }); 
 //导入对应的函数
 $('#file_upload').uploadify({
  'swf': '/public/uploadify/uploadify.swf', //FLash文件路径
  'buttonText': '浏 览',    //按钮文本
  'uploader': '{{url("lazy/uploadExcel")}}', //后台处理程序的路径
  'queueID': 'fileQueue',    //队列的ID
  'queueSizeLimit': 1,    //队列最多可上传文件数量,默认为999
  'auto': false,     //选择文件后是否自动上传,默认为true
  'multi': false,     //是否为多选,默认为true
  'removeCompleted': true,   //是否完成后移除序列,默认为true
  'fileSizeLimit': '10MB',   //单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值
  'fileTypeDesc': 'Excel Files',   //文件描述
  'fileTypeExts': '*.xlsx',   //上传的文件后缀过滤器
  'onQueueComplete': function (event, data) { //所有队列完成后事件
  //业务处理代码
  //提示用户Excel格式是否正常,如果正常加载数据
  var guid = $("#AttachGUID").val();
  $.ajax({
   url: '/lazy/CheckExcelColumns?type=check&guid=' + guid,
   type: 'get',
   dataType: 'json',
   success: function (data) {  
   if (data.status) {
    // InitGrid(); //重新刷新表格数据
    $.each(data.rows, function (i, item) {
    var tr = "<tr>";
    tr += "<td>" + item['name']+ "</td>";
    tr += "<td>" + item['identifier'] + "</td>";
    tr += "<td>" + item['subject'] + "</td>"; 
    tr += "<td>" + item['user'] + "</td>";
    tr += "<td>" + item['getExcelTime'] + "</td>";
    tr += "</tr>";
$("#gridImport_body").append(tr);
    });
   }else{
    alert(data.msg);
   }
   }
  });
  },
  'onUploadStart': function (file) {
  InitUpFile(); //重置GUID(每次不同,用时间戳代替)
  $("#gridImport_body").html("");
  //动态传参数
  var guid = $("#AttachGUID").val();
 var salt = 'test' ; //md5加密辅助串
  var token = hex_md5(salt+guid) ; //校验参数
  $("#file_upload").uploadify(
   "settings", 
   'formData', { 
     'folder': '数据导入excel文件', 
     'guid': guid, 
     'token':token,
    }
  ); 
  },
  'onUploadError': function (event, queueId, fileObj, errorObj) {
  alert(errorObj.type + ":" + errorObj.info);
  }
 });
 function InitUpFile(){
  var timestamp = Date.parse(new Date());
  $('#AttachGUID').val(timestamp);
 }
</script>

后端代码:

//上传文件处理
 public function uploadExcelAction()
 { 
 $targetFolder = '/public/uploadFile/'; // Relative to the root
 $salt = 'test';
 $verifyToken = md5($test . $_POST['guid']);
 if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
  $tempFile = $_FILES['Filedata']['tmp_name'];
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
  $targetFile = rtrim($targetPath,'/') . '/' . $verifyToken.'.xlsx';

  $fileTypes = array('xlsx'); 
  $fileParts = pathinfo($_FILES['Filedata']['name']);
  if (in_array($fileParts['extension'],$fileTypes)) {
  move_uploaded_file($tempFile,$targetFile);
  echo '1';
  } else {
  echo 'Invalid file type.';
  }
 }else{
  echo 'Invalid params.';
 }
 die;
 }

处理excel数据,就说两个关键点:取单元格的值和背景色

 $objReader  = \PHPExcel_IOFactory::createReader('Excel2007');
   $objPHPExcel = $objReader->load($targetFile);
   $sheet    = $objPHPExcel->getSheet();
   $sheetRows  = $sheet->getHighestDataRow();                      // 取得总行数
   $sheetColumns = PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); //列数

//读取单元格
    $value   = $objPHPExcel->getActiveSheet()->getCell($columns[$k] . $j)->getValue(); //获取每个单元格的值
    $fillColor = $objPHPExcel->getActiveSheet()->getStyle($columns[$k] . $j)->getFill()->getStartColor()->getARGB(); //背景色

下面附图:

导入界面:

基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能

excel表:

基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
php 无限级 SelectTree 类
May 19 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
php中取得文件的后缀名?
Feb 20 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
php中让人头疼的浮点数运算分析
Oct 10 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 PHP
PHP 配置后台登录以及模板引入
Jan 24 #PHP
PHP实现登陆表单提交CSRF及验证码
Jan 24 #PHP
php获取访问者浏览页面的浏览器类型
Jan 23 #PHP
php字符集转换
Jan 23 #PHP
Yii全局函数用法示例
Jan 22 #PHP
PHP5.5安装PHPRedis扩展及连接测试方法
Jan 22 #PHP
微信公众号OAuth2.0网页授权问题浅析
Jan 21 #PHP
You might like
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
基于javascript滚动图片具体实现
2013/11/18 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
jquery attr()设置和获取属性值实例教程
2016/09/25 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
vue各种事件监听实例(小结)
2020/06/24 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
关于Python-faker的函数效果一览
2019/11/28 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
写出一个方法实现冒泡排序
2016/07/08 面试题
前台接待的工作职责
2013/11/21 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
天那边观后感
2015/06/09 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
MySQL创建管理RANGE分区
2022/04/13 MySQL