開(kāi)發(fā)思路
1、先把Excel文件上傳到服務(wù)器
2、獲取服務(wù)器Excel文件內(nèi)容
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
3、寫(xiě)入數(shù)據(jù)庫(kù)
一、上傳Excel文件,使用php里自帶的上傳方法 “ThinkUpload();”,可以很方便的實(shí)現(xiàn)。為此我整理下使用這個(gè)方法的最簡(jiǎn)單方式
/** ?*?TODO?上傳文件方法 ?*?@param?$fileid?form表單file的name值 ?*?@param?$dir?上傳到uploads目錄的$dir文件夾里 ?*?@param?int?$maxsize?最大上傳限制,默認(rèn)1024000?byte ?*?@param?array?$exts?允許上傳文件類(lèi)型?默認(rèn)array('gif','jpg','jpeg','bmp','png') ?*?@return?array?返回array,失敗status=0?成功status=1,filepath=newspost/2014-9-9/a.jpg ?*/ function?uploadfile($fileid,$dir,$maxsize=5242880,$exts=array('gif','jpg','jpeg','bmp','png'),$maxwidth=430){ ????$upload?=?new?ThinkUpload();//?實(shí)例化上傳類(lèi) ????$upload->maxSize???=?????$maxsize;//?設(shè)置附件上傳大小,單位字節(jié)(微信圖片限制1M ????$upload->exts??????=?????$exts;//?設(shè)置附件上傳類(lèi)型 ????$upload->rootPath??=?????'./uploads/';?//?設(shè)置附件上傳根目錄 ????$upload->savePath??=?????$dir.'/';?//?設(shè)置附件上傳(子)目錄 ????//?上傳文件 ????$info???=???$upload->upload(); ????if(!$info)?{//?上傳錯(cuò)誤提示錯(cuò)誤信息 ????????return?array(status=>0,msg=>$upload->getError()); ????}else{//?上傳成功 ????????return?array(status=>1,msg=>'上傳成功',filepath=>$info[$fileid]['savepath'].$info[$fileid]['savename']); ????} }
這里默認(rèn)上傳到thinkphp入口文件index.php所在的文件夾uploads,此方法返回一個(gè)數(shù)據(jù),狀態(tài)status=1時(shí)為成功,也建議大家在寫(xiě)功能模塊時(shí)或做封裝時(shí),整個(gè)系統(tǒng)的在架構(gòu)初期應(yīng)該有約定,在必要的情況下返回值用數(shù)組形式,成功返回
return?array(status=>1,data=>....,info=>.....)
失敗時(shí)可以返回
array(status->0,info=>'可以說(shuō)明出錯(cuò)的原因',....)
這樣用統(tǒng)一的方式有利于規(guī)范開(kāi)發(fā),團(tuán)隊(duì)協(xié)作時(shí)看代碼時(shí)可以提高效率,減少思維運(yùn)轉(zhuǎn),說(shuō)遠(yuǎn)了,上傳的方法調(diào)用方式如下:
//excel?文件 ????????if(!empty($_FILES['xls']['name'])){ ????????????$upload=uploadfile('xls','tempxls',5242880,array('xls','xlsx')); ????????????if($upload['status']){ ????????????????$path=$upload['filepath']; ????????????}else{ ????????????????$this->error($upload['msg']); ????????????} ????????}
二、獲取Excel數(shù)據(jù)
1、首先需要引入PHPExcel的類(lèi)庫(kù)
require_once?'module/PHPExcel/Classes/PHPExcel/IOFactory.php';
2、獲取Excel第0張表即(Sheet1)
//獲取excel文件 $objPHPExcel?=?PHPExcel_IOFactory::load("uploads/$path"); $objPHPExcel->setActiveSheetIndex(0); $sheet0=$objPHPExcel->getSheet(0);
3、獲取行數(shù),并把數(shù)據(jù)讀取出來(lái)$data數(shù)組
$rowCount=$sheet0->getHighestRow();//excel行數(shù) ????????$data=array(); ????????for?($i?=?2;?$i?getExcelValue($sheet0,'A'.$i); ????????????$item['sex']=$this->getExcelValue($sheet0,'B'.$i); ????????????$item['contact']=$this->getExcelValue($sheet0,'C'.$i); ????????????$item['remark']=$this->getExcelValue($sheet0,'D'.$i); ????????????$item['addtime']=$this->getExcelValue($sheet0,'E'.$i); ????????????$data[]=$item; ????????}
三、最后保存到數(shù)據(jù)
$success=0; ????????$error=0; ????????$sum=count($data); ????????foreach($data?as?$k=>$v){ ????????????if(M('temp_area3')->data($v)->add()){ ????????????????$success++; ????????????}else?{ ????????????????$error++; ????????????} ????????} ????????echo?"總{$sum}條,成功{$success}條,失敗{$error}條。";
推薦教程:《TP5》