Yii框架是一個基於組件的大型框架,比較智能,可以自動生成代碼,加速開發進程。Yii有很多的擴展,像在後臺用來創建頁面的bootstrap,srbac權限控制,編輯器等等,由於在目前的項目中需要處理excel數據,所以用到了PHPExcel,下面簡單說下Yii中如何使用PHPExcel.
1.PHPExcel下載 http://phpexcel.codeplex.com/releases/view/96183
下載後解壓到Yii中的protected/extensions目錄下
2.如何使用?
①在main.php中配置
'import'=>array( 'application.models.*', 'application.components.*', 'application.extensions.PHPExcel.*',//這裏引入PHPExcel ),
②由於Yii中的autoload機制是按照類名去查找文件,即類名與文件名一致。而PHPExcel的類文件命名方式則是:dir_dir_classname.php,即文件名把文件的目錄名都記錄了,這種命名方式yii肯定識別不了。所以首先我們需要註銷掉Yii的自動加載,找到PHPExcel中的Autoloader.php文件,修改如下:
public static function Register() { // if (function_exists('__autoload')) { // Register any existing autoloader function with SPL, so we don't get any clashes //spl_autoload_register('__autoload'); // } // Register ourselves with SPL // return spl_autoload_register(array('PHPExcel_Autoloader', 'Load')); $functions = spl_autoload_functions(); foreach ( $functions as $function) spl_autoload_unregister($function); $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions); foreach ( $functions as $function) $x = spl_autoload_register($function); return $x; } // function Register()
③PHPExcel讀取Excel文件中的內容
第一步:上傳文件
//上傳文件 public function savefile($uploadfile=null){ $folder_path= Yii::getPathOfAlias('webroot').'/../uploads/customer'; if($uploadfile==null){ $uploadfile= CUploadedFile::getInstance($this,'path'); } if($uploadfile!=null){ if(!preg_match('/(xlsx|application\/vnd.ms-excel|et)/', $uploadfile->getType())){ $fileinfo['error']=array('上傳文件格式不正確,應該爲.xls、.xlsx、.et格式'); } $path = '/' . uniqid() . '-' . iconv('utf-8','gb2312', urlencode($uploadfile->getName()));//給上傳的文件取別名 //若目錄不存在,則創建 if(!file_exists($folder_path)){ mkdir($folder_path, 0777, true); } //保存上傳的文件 $uploadfile->saveAs($folder_path.$path); }else{ $path=''; } $path= iconv('gb2312','utf-8', $path); $fileinfo['path']=$folder_path.$path; $fileinfo['minlength']= strlen($folder_path); return $fileinfo; }
第二步:讀取Excel文件
//讀取excel文件數據 public function phpExcelRead($filePath){ $PHPExcel = new PHPExcel(); /**默認用excel2007讀取excel,若格式不對,則用之前的版本進行讀取*/ $PHPReader = new PHPExcel_Reader_Excel2007(); if (!file_exists($filePath) || !is_file($filePath)) { echo '文件不存在'; return; } if(!$PHPReader->canRead($filePath)){ $PHPReader = new PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)){ echo 'no Excel'; return ; } } $PHPExcel = $PHPReader->load($filePath);//載入excel文件 $currentSheet = $PHPExcel->getSheet(0);/**取得最大的列號*/ $allColumn = $currentSheet->getHighestColumn();/**取得一共有多少列*/ $allRow = $currentSheet->getHighestRow();/**從第二行開始輸出,因爲excel表中第一行爲列名*/ $arr = array(); for($j = 2;$j <=$allRow;$j++){ /**從第A列開始輸出*/ $str =''; for($k= 'A';$k<=$allColumn; $k++){ $str .= $PHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'\\';//讀取單元格 $strs = explode("\\",$str); } $arr[] = $strs; } return $arr; }