一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - ThinkPHP與PHPExcel沖突解決方法

ThinkPHP與PHPExcel沖突解決方法

2019-12-10 13:04PHP教程網 PHP教程

最近一個項目需要批量導入Excel數據,要用到PHP讀取Excel中的內容然后導入到數據庫。

很早之前就知道有一個叫做PHPExcel的類(官方網站)可以用來操作Excel,一直沒有機會嘗試,今天試用發現無比強大,下載后的源碼包里有詳細文檔,幾乎能實現手工操作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\n"; 


要在ThinkPHP中使用,把源碼包中的Classes目錄復制到ThinkPHP的Vendor目錄下,改名為PHPExcel,然后調用Vendor方法載入 

復制代碼代碼如下:


vendor('PHPExcel.PHPExcel'); 


可是這樣一來發現讀取Excel以后再調用M或者D方法實例化模型類時報找不到Model類的錯誤,經過研究發現是自動裝載機制沖突,要解決沖突,需要在M或者D方法調用之前使用spl_autoload_register函數重新注冊autoloader類 

復制代碼代碼如下:


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; 


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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 性欧美videofree中文字幕 | 日本指交| 欧美人做人爱a全程免费 | 9久re热视频这里只有精品 | 久久精品在现线观看免费15 | 亚洲网视频 | 成人综合婷婷国产精品久久免费 | 日本强不卡在线观看 | 超级碰碰免费视频 | 成年私人影院免费视频网站 | 欧美精品久久一区二区三区 | 99国产小视频 | 亚洲欧美国产精品完整版 | 铁牛tv 在线观看 | 白丝校花被扒开双腿喷水小说 | 成成人看片在线 | 亚洲第一色网 | 亚洲卡一卡2卡三卡4麻豆 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 国产大片免费在线观看 | 69看片| 国产免费久久精品 | 亚洲v日韩v欧美在线观看 | 91制片厂制作传媒免费版樱花 | 日韩激情视频在线观看 | 521色香蕉网在线观看免费 | 国产精品合集久久久久青苹果 | 我和黑色丝袜班主任 | 久久久久国产一级毛片高清片 | 高清不卡日本v在线二区 | 亚洲qvod图片区电影 | 国产欧美精品一区二区三区–老狼 | 国产大秀视频一区二区三区 | 秋霞午夜伦午夜高清福利片 | 亚洲六月丁香六月婷婷蜜芽 | 国产亚洲精品一区二区在线播放 | 好爽视频| 韩国甜性涩爱在线播放 | 人妖巨茎video| 日韩一区二三区无 | 91香蕉视频网址 |