欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-10-31 13:34:15
废话不多说,直接给大家贴代码了,代码附有注释,相信大家都能看懂的,有不明白的地方欢迎给我留言。 前端html+jquery  备注jquery需要1.x版本,不...

废话不多说,直接给大家贴代码了,代码附有注释,相信大家都能看懂的,有不明白的地方欢迎给我留言。

前端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);
 }

通过以上代码实现了thinkphp+uploadify+upload+phpexcel 无刷新导入数据,希望对大家有所帮助。