Yii學習之PHPExcel的引入和使用

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;        
         
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章