ThinkPHPでPHPExcelを呼び出す問題解決策


ThinkPHPでPHPExcelを呼び出すとデータは完全に読めますが、次のD、Mまたはテンプレートを呼び出すときにエラーが発生します.△私一人でこの問題に遭遇したのか分からない.研究の末、やっと解決策を見つけた.皆さんと分かち合いましょう.ほほほ!1,まずPHPExcelのパッケージをダウンロードし,ThinkPHP/Vendor/(つまりThinkのサードパーティクラスライブラリディレクトリ)の下に置く.2、関数を呼び出します.

  
  
  
  
  1. protected function Import_Execl($file){ 
  2.         if(!file_exists($file)){ 
  3.             return array("error"=>1); 
  4.         } 
  5.         Vendor("PHPExcel.PHPExcel"); 
  6.         $PHPExcel = new PHPExcel();   
  7.         $PHPReader = new PHPExcel_Reader_Excel2007();           
  8.         if(!$PHPReader->canRead($file)){       
  9.             $PHPReader = new PHPExcel_Reader_Excel5();  
  10.             if(!$PHPReader->canRead($file)){       
  11.                 return array("error"=>2); 
  12.             } 
  13.         } 
  14.         $PHPExcel = $PHPReader->load($file); 
  15.         $SheetCount = $PHPExcel->getSheetCount(); 
  16.         for($i=0;$i<$SheetCount;$i++){ 
  17.             $currentSheet = $PHPExcel->getSheet($i); 
  18.             $allColumn = $this->ExcelChange($currentSheet->getHighestColumn());    
  19.             $allRow = $currentSheet->getHighestRow();   
  20.             $array[$i]["Title"] =  $currentSheet->getTitle(); 
  21.             $array[$i]["Cols"] = $allColumn; 
  22.             $array[$i]["Rows"] = $allRow; 
  23.             $arr = array(); 
  24.             for($currentRow = 1 ;$currentRow<=$allRow;$currentRow++){ 
  25.                 $row = array(); 
  26.                 for($currentColumn=0;$currentColumn<$allColumn;$currentColumn++){ 
  27.                     $row[$currentColumn] = $currentSheet->getCellByColumnAndRow($currentColumn,$currentRow)->getValue(); 
  28.                 } 
  29.                 $arr[$currentRow] = $row; 
  30.             } 
  31.             $array[$i]["Content"] = $arr; 
  32.         } 
  33.         spl_autoload_register(array('Think','autoload'));// , ThinkPHP PHPExcel  
  34.         unset($currentSheet); 
  35.         unset($PHPReader); 
  36.         unset($PHPExcel);        
  37.         unlink($file);   
  38.         return array("error"=>0,"data"=>$array); 
  39.     } 
  40.      
  41.     protected function ExcelChange($str){// Execl  
  42.         $len = strlen($str)-1; 
  43.         $num = 0
  44.         for($i=$len;$i>=0;$i--){ 
  45.             $num += (ord($str[$i]) - 64)*pow(26,$len-$i); 
  46.         } 
  47.         return $num; 
  48.     } 

3、呼び出します.
 

  
  
  
  
  1. public function import(){ 
  2.         if(isset($_FILES["import"]) && ($_FILES["import"]["error"] == 0)){ 
  3.             $result = $this->Import_Execl($_FILES["import"]["tmp_name"]); 
  4.             if($this->Execl_Error[$result["error"]] == 0){ 
  5.                 $execl_data = $result["data"][0]["Content"]; 
  6.                 unset($execl_data[1]); 
  7.                 $data = D("Data"); 
  8.                 foreach($execl_data as $k=>$v){ 
  9.                     $d["serial_no"] = $v[0]; 
  10.                     $d["check_no"] = $v[1]; 
  11.                     $d["work_no"] = $v[2]; 
  12.                     $d["class_name"] = $v[3]; 
  13.                     $d["user_name"] = $v[4]; 
  14.                     $d["new_class"] = $v[5]; 
  15.                     $d["error_level"] = $v[6]; 
  16.                     $data->data($d)->add(); 
  17.                 }                
  18.                 $this->success($this->Execl_Error[$result["error"]]); 
  19.             }else{ 
  20.                 $this->error($this->Execl_Error[$result["error"]]); 
  21.             } 
  22.         }else{ 
  23.             $this->error(" "); 
  24.         } 
  25.     }    

4、エラーデータ:

  
  
  
  
  1. protected $Execl_Error = array(" "," ","Execl "); 

 
本文は“海磊”のブログから出て、転載をお断りします!