ThinkPHP와 PHPExcel 충돌 해결 방법
간단한 Excel 읽기 예는 다음과 같습니다.
 
  
$inputFileType = 'Excel2007'; 
  
$inputFileName = './public/files/import_user_template.xlsx'; 
  
$sheetname = 'Sheet1'; 
  
//  Excel  ,    reader 
  
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
  
//       ,         
  
$objReader->setReadDataOnly(true); 
  
//      sheet 
  
$objReader->setLoadSheetsOnly($sheetname); 
  
$objPHPExcel = $objReader->load($inputFileName); 
  
$curSheet = $objPHPExcel->getSheet(0); 
  
//         
  
$allColumn = $curSheet->getHighestColumn(); 
  
//         
  
$allRow = $curSheet->getHighestRow(); 
  
for($currentRow = 1; $currentRow <= $allRow; $currentRow++){ 
  
for($currentCol = 'A'; $currentCol <= $allColumn; $currentCol++){ 
  
echo $curSheet->getCell($currentCol.$currentRow)->getValue()."\t"; 
  
} 
  
echo "\r
"; 
  
} 
  
 
   ThinkPHP에서 사용하려면 원본 패키지의 Classes 디렉터리를 ThinkPHP의 Vendor 디렉터리에 복사해서 PHPExcel로 이름을 바꾸고 Vendor 방법으로 불러옵니다
 
  
vendor('PHPExcel.PHPExcel'); 
  
 
   그러나 이렇게 해서 Excel을 읽은 후에 M 또는 D 방법을 호출하는 실례화 모델 클래스 타임즈에서 모델 클래스의 오류를 찾을 수 없다는 것을 발견했다. 연구를 통해 자동 마운트 메커니즘 충돌이라는 것을 발견했다. 충돌을 해결하려면 M 또는 D 방법을 호출하기 전에 spl 를 사용해야 한다.autoload_register 함수 autoloader 클래스 재등록
 
  
spl_autoload_register(array('Think','autoload')); 
  
 
   ThinkPHP에서 PHPExcel을 호출하는 문제 해결 방안은 ThinkPHP에서 PHPExcel을 호출할 때 데이터는 완전히 읽을 수 있지만 다음 D, M 또는 템플릿을 호출할 때 오류가 발생할 수 있습니다.송이경(신지현)
연구를 거쳐 마침내 해결 방법을 찾았다.여러분과 함께 나누세요.허허!
1, 먼저 PHPExcel의 가방을 다운로드하여 ThinkPHP/Vendor/(즉 Think의 제3자 라이브러리 디렉터리) 아래에 놓는다.
2, 호출 함수.
 
  
protected function Import_Execl($file){ 
  
if(!file_exists($file)){ 
  
return array("error"=>1); 
  
} 
  
Vendor("PHPExcel.PHPExcel"); 
  
$PHPExcel = new PHPExcel(); 
  
$PHPReader = new PHPExcel_Reader_Excel2007(); 
  
if(!$PHPReader->canRead($file)){ 
  
$PHPReader = new PHPExcel_Reader_Excel5(); 
  
if(!$PHPReader->canRead($file)){ 
  
return array("error"=>2); 
  
} 
  
} 
  
$PHPExcel = $PHPReader->load($file); 
  
$SheetCount = $PHPExcel->getSheetCount(); 
  
for($i=0;$i$currentSheet = $PHPExcel->getSheet($i); 
  
$allColumn = $this->ExcelChange($currentSheet->getHighestColumn()); 
  
$allRow = $currentSheet->getHighestRow(); 
  
$array[$i]["Title"] = $currentSheet->getTitle(); 
  
$array[$i]["Cols"] = $allColumn; 
  
$array[$i]["Rows"] = $allRow; 
  
$arr = array(); 
  
for($currentRow = 1 ;$currentRow<=$allRow;$currentRow++){ 
  
$row = array(); 
  
for($currentColumn=0;$currentColumn$row[$currentColumn] = $currentSheet->getCellByColumnAndRow($currentColumn,$currentRow)->getValue(); 
  
} 
  
$arr[$currentRow] = $row; 
  
} 
  
$array[$i]["Content"] = $arr; 
  
} 
  
spl_autoload_register(array('Think','autoload'));//   ,  ThinkPHP PHPExcel    
  
unset($currentSheet); 
  
unset($PHPReader); 
  
unset($PHPExcel); 
  
unlink($file); 
  
return array("error"=>0,"data"=>$array); 
  
} 
  
protected function ExcelChange($str){//  Execl        
  
$len = strlen($str)-1; 
  
$num = 0; 
  
for($i=$len;$i>=0;$i--){ 
  
$num += (ord($str[$i]) - 64)*pow(26,$len-$i); 
  
} 
  
return $num; 
  
} 
  
 
   3, 호출.
 
  
public function import(){ 
  
if(isset($_FILES["import"]) && ($_FILES["import"]["error"] == 0)){ 
  
$result = $this->Import_Execl($_FILES["import"]["tmp_name"]); 
  
if($this->Execl_Error[$result["error"]] == 0){ 
  
$execl_data = $result["data"][0]["Content"]; 
  
unset($execl_data[1]); 
  
$data = D("Data"); 
  
foreach($execl_data as $k=>$v){ 
  
$d["serial_no"] = $v[0]; 
  
$d["check_no"] = $v[1]; 
  
$d["work_no"] = $v[2]; 
  
$d["class_name"] = $v[3]; 
  
$d["user_name"] = $v[4]; 
  
$d["new_class"] = $v[5]; 
  
$d["error_level"] = $v[6]; 
  
$data->data($d)->add(); 
  
} 
  
$this->success($this->Execl_Error[$result["error"]]); 
  
}else{ 
  
$this->error($this->Execl_Error[$result["error"]]); 
  
} 
  
}else{ 
  
$this->error("      "); 
  
} 
  
} 
  
 
   4, 오류 데이터:
 
  
protected $Execl_Error = array("      ","     ","Execl       "); 
  
 
 
                이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.