在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文件格式不正确");