ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据

前端HTML+JQuery  备注Jquery需要1.x版本,不能用2.x版本

1.引入必要文件及上传input

  <load file="__PUBLIC__/js/jquery-1.11.3.min.js" />
  <load file="__PUBLIC__/uploadify/jquery.uploadify.min.js" />
  <load file="__PUBLIC__/uploadify/uploadify.css" />
<input type="file" class="" id="student" name="student">

2.uploadify使用操作

 <script>
  $(function(){
    //ThinkPHP上传地址
    var upload = "{:U(MODULE_NAME.‘/Student/upload‘)}";
    //ThinkPHP sessionID的提交变量
    //‘VAR_SESSION_ID‘=>‘session_id‘,在ThinkPHP/Conf/convention.php中进行配置,默认关闭的需要开启
    var sid = ‘{:session_id()}‘;
    //导入数据地址
    var daoruUrl = "{:U(MODULE_NAME.‘/Student/daoruHandle‘)}"
    //Amaze ui 模态框
    var modal = $(‘#my-modal-loading‘);
    //uploadify使用方法
    $(‘#student‘).uploadify({
      ‘swf‘      : ‘__PUBLIC__/uploadify/uploadify.swf‘,
      ‘uploader‘ : upload,
      ‘buttonText‘ : ‘选择文件...‘,
      ‘width‘:120,
      ‘height‘:30,
      ‘formData‘:{‘session_id‘:sid},
      ‘fileTypeExts‘:‘*.xls‘,
      //开始上传弹出模态框
      ‘onUploadStart‘ : function(file) {
        $(‘#alert-content‘).html(‘正在上传文件‘);
          modal.modal();
        },
      //上传成功关闭模态框,并用后台函数导入数据
      ‘onUploadSuccess‘:function(file, data, response){
        $(‘#alert-content‘).html(‘正在导入数据‘);
        data = eval("("+data+")");
        $.ajax({
          type: ‘POST‘,
          url: daoruUrl,
          data: {‘file‘:data.file},
          success: function(retdata){
            modal.modal(‘close‘);
            if(retdata==1){
              alert(‘导入成功‘);
            }else{
              alert(‘导入失败‘);
            }
          },
          dataType: ‘json‘
        });
      }
    });
  });
  </script>

3、ThinkPHP控制器上传操作:备注需要引入Upload.class.php空间

    function upload(){
        $config = array(
            ‘maxSize‘    =>    3145728,
            ‘rootPath‘   =>    ‘./Uploads/‘,
            ‘savePath‘   =>    ‘‘,
            ‘saveName‘   =>    array(‘uniqid‘,‘‘),
            ‘exts‘       =>    array(‘xls‘),
            ‘autoSub‘    =>    true,
            ‘subName‘    =>    array(‘date‘,‘Ymd‘),
            );
        $upload = new Upload($config);
        // 上传文件
        $info   =   $upload->upload();
        if(!$info) {// 上传错误提示错误信息
            $this->error($upload->getError());
        }else{// 上传成功 获取上传文件信息

            $file = $info[‘Filedata‘][‘savepath‘].$info[‘Filedata‘][‘savename‘];
        }
        //p($info);
        $data = array(
            ‘file‘=>‘./Uploads/‘.$file,
            );
        echo json_encode($data);
    }

4.导入数据进去mysql

//导入数据处理
    function daoruHandle(){
        $file = I(‘file‘);
        $excelData = excel_to_mysql($file);
        foreach($excelData[‘data‘] as $row){
            $data = array(
                ‘xuehao‘=>$row[‘xuehao‘],
                ‘xingming‘=>$row[‘xingming‘],
                ‘xingbie‘=>($row[‘xingbie‘]==‘男‘)?1:0,
                ‘mima‘=>md5($row[‘mima‘]),
                );

            M(‘student‘)->add($data);
        }
        echo 1;
    }

5.PHPExcel读取Excel文件返回数据函数

function excel_to_mysql($file){
        //导入PHPExcel第三方类库
        //vendor(‘PHPExcel.PHPExcel‘);
        import(‘Classes.PHPExcel‘,COMMON_PATH,‘.php‘);
        //实例化PHPExcel类,用于接收Excel文件
        $PHPExcel = new PHPExcel();
        //读取Excel文件类实例化
        $PHPReader = new PHPExcel_reader_Excel5();
        //检测Excel版本是否可读
        if(!$PHPReader->canRead($file)){

            $PHPReader = new PHPExcel_Reader_Excel2007();

            if(!$PHPReader->canRead($file)) return array(‘error‘=>1);//未知版本的Excel
        }
        //读取Excel文件
        $PHPExcel = $PHPReader->load($file);
        //获得Excel中表的数量
        $sheetCount = $PHPExcel->getSheetCount();
        //获得第一张工作表
        $sheet=$PHPExcel->getSheet(0);
        //获得表中最大数据列名
        $column = $sheet->getHighestColumn();
        //获得表中最大数据行名
        $row = $sheet->getHighestRow();
        //循环获得表中数据
        for($i=1;$i<=$row;$i++){

            $data[] = array(
                //通过工作表对象的getCell方法获得单元格 getValue方法获得该单元格数值
                ‘xuehao‘=>$sheet->getCell(‘A‘.$i)->getValue(),

                ‘xingming‘=>$sheet->getCell(‘B‘.$i)->getValue(),

                ‘xingbie‘=>$sheet->getCell(‘C‘.$i)->getValue(),

                ‘mima‘=>$sheet->getCell(‘D‘.$i)->getValue(),

            );
        }
        //释放工作表对象
        unset($sheet);
        //释放读取Excel文件对象
        unset($PHPReader);
        //释放Excel文件对象
        unset($PHPExcel);
        //返回数据
        return array(‘error‘=>0,‘data‘=>$data);
    }
时间: 2024-08-05 15:09:17

ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据的相关文章

struts2+jquery 实现ajax无刷新更新数据

前几天为了实现一个struts 的 ajax无刷新更新数据的例子,发现网上资料很少,很多已经过时或者链接都失效了 不过整合他们的资料,加上自己的研究,终于实现了效果 要求:1.各个学院提交学生数据到服务器,要求ajax 无刷新更新数据, 2.服务器端返回"更新成功"的提示窗口: 3.之后,使用jquery 更新input输入框的value值,为实现jquery 打印页面局部数据做准备. 此处使用struts2的第二种方法,(修改struts 配置文件,增加ajax package 的方

jq实现点击表格无刷新修改数据,优化版

1 <!-------------------修改密码-------------------------- > 2 $("#pwd").live("click",function(){//① 3 $(this).parents("tr").find("#a_cannel").text("取消"); 4 user=$(this).parents("tr").find("

ajax实现无刷新获取数据javascript+jsp+serverlet

jsp页面通过ajax获取后台serverlet传来的数据 serverlet页面代码 package com.shxt.lesson16homework.Servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Resu

使用AjaxPro实现无刷新更新数据

需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM对应的数值即可,而AjaxPro库恰恰具有使用Javascript语句获取后台方法返回的数据的功能,问题就这样迎刃而解,顿时感觉萌萌哒. 流程 整个过程如下图所示: 详细操作 首先下载AjaxPro库(点击此处下载AjaxPro库),下载后解压得到两个dll文件,如下所示: 其中AjaxPro.2.

ThinkPhp 3.2 ajax无刷新分页(未完全改完,临时凑合着用)

临时更改后的page类(很多地方没修改...因为笔者PHP没学好..)如下: <?phpnamespace Fenye\libs; /**  file: page.class.php   完美分页类 Page  */ class Page {  private $total;          //数据表中总记录数  private $listRows;       //每页显示行数  private $limit;          //SQL语句使用limit从句,限制获取记录个数  pri

Asp.net MVC Vue Axios无刷新请求数据和响应数据

Model层Region.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication1.Models { public class Region { public int Id { get; set; } public string City { get; set; } } } Controller using System; us

pjax + tp5,实现局部无刷新返回数据

文件1:\application\admin\controller\Setting.php 最后一句代码:要fetch原页面 <?php namespace app\admin\controller; use think\Request; class Setting extends Base { public function _initialize() { parent::_initialize(); } public function page_one() { return $this->

window.history.pushState与ajax实现无刷新更新页面url

ajax能无刷新更新数据,但是不能更新url HTML5的新API: window.history.pushState, window.history.replaceState 用户操作history,点击前进后退按钮会触发popstate事件. 这些方法可以协同window.onpopstate事件一起工作. 改变url的demo 本页是foo.html,url改变成bar.html,内容却不变 <!DOCTYPE html> <html> <head> <me

Ajax无刷新(二)三级联动

1 写一个公用页面 2 <% 3 String path = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath(); 4 System.out.println(path); 5 request.setAttribute("path",path); 6 %> 1 其他页面需要绝对路径的话