基于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桌面中心(二) 数据库写入
Mar 11 PHP
PHP 文件上传全攻略
Apr 28 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
php定界符
Jun 19 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
PHP常见数组函数用法小结
Mar 21 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
php封装一个异常的处理类
Jun 08 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 17 PHP
php+ajax实现文件切割上传功能示例
Mar 03 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
使用数据库保存session的方法
2006/10/09 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
为你总结一些php系统类函数
2015/10/21 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
javascript 闭包疑问
2010/12/30 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python中类的创建和实例化操作示例
2019/02/27 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
html5视频自动横过来自适应页面且点击播放功能的实现
2020/06/03 HTML / CSS
人事专员岗位职责
2013/11/20 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
工会工作先进事迹
2014/08/18 职场文书
岳庙导游词
2015/02/04 职场文书
超级礼物观后感
2015/06/15 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL