ThinkPHPとPHPExcelの衝突解決方法

4757 ワード

以前からPHPExcelという種類があることを知っていました。Excelを操作してもいいです。試してみる機会がないです。今日の試用ではこの上ない強さを発見しました。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で使用します。ソースパケットの中のClassディレクトリをThinkPHPのVeendorディレクトリにコピーしてPHPExcelと改名して、Vendorメソッドを呼び出して
 
vendor('PHPExcel.PHPExcel');
にロードします。しかし、Excelを読んでからMまたはD方法の実用化されたタイムズ紙類はModelのエラーを見つけられません。研究の結果、自動搭載機構の衝突であることが分かりました。衝突を解決するには、MまたはD方法の呼び出し前にspl_を使用する必要があります。autload_register関数再登録atoloader類
 
spl_autoload_register(array('Think','autoload'));
は、ThinkPHPでPHPExcelを呼び出した問題解決策をThinkPHPでPHPExcelを呼び出すと、データは完全に読めますが、次のステップD、Mまたはテンプレートを呼び出すとエラーが発生します。私一人でこの問題にあったのか分かりませんか?)研究の末、やっと解決方法が見つかった。みんなと分かち合いましょう。ふふっ1、まずPHPExcelのカバンをダウンロードして、ThinkPHP/Vendor/(つまりThinkのサードパーティカタログ)の下に置いてください。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<$SheetCount;$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<$allColumn;$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;
}
、呼び出します。
 
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(" ");
}
}
、エラーデータ:
 
protected $Execl_Error = array(" "," ","Execl ");