ThinkPHP+uploadify+upload+PHPExcelによるインポートデータのリフレッシュなし

5147 ワード

くだらない话は多く言わないで、直接みんなにコードを贴って、コードは注釈をつけて、みんながすべて理解することができることを信じて、分からない地方があって私に伝言を歓迎します.
フロントエンドHTML+JQuery備考Jqueryは1.xバージョン、2は使用できません.xバージョン
1.必要なファイルの導入とinputのアップロード

 
 
 

2.uploadify使用操作


 $(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'
  });
  }
 });
 });
 

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無リフレッシュインポートデータを実現しましたので、ご協力をお願いします.