基于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);
 }

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