Yii框架 phpexcel 導出

1、說明php

      以前使用的是PHPExcelXML包實現的數據導出,因爲導出的文件擴展名爲「.xls」 在office2007上帶不開,報以下圖錯誤(用 WPS都能打開)html

所以,這次採用了 PHPExcel包 不只支持生成Excel(.xls)還支持Excel2007(.xlsx)以及PDF 文檔。數組

2、資源app

     PHPExcel的官方網站以下:http://phpexcel.codeplex.com/框架

3、目錄測試

      當前的版本是:PHPExcel_1.8.0_odt.zip網站

     PHPExcel.php文件是類庫的接口,外部的PHP代碼經過它來實現對PHPExcel的調用,ui

     PHPExcel目錄下是各類不一樣文檔(如Excel、Excel200七、PDF等)的讀取和生成的具體操做代碼.spa

4、修改配置文件.net

      修改路徑:extensions/PHPExcel/Autoloader.php文件Register方法,代碼以下;

public static function Register() {
        //這是phpexcel導出修改的方法
        /* 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'));*/
        //這是phpexcel導出修改的方法
            $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()

5、Controller中使用的方法

      說明:由於我目前的代碼條件,不能直接寫一個phpexcel導出的方法,只能判斷是否點擊了「Save to excel」 button 按鈕經過value值來判斷訪問導出的代碼段;

一、加載相關代碼

    在YII框架中某一方法中插入以下代碼;

 /*導出Excel----數據-------------------star-------2015-8-28--lcc */
    include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel.php');
    include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel/Writer/Excel2007.php'); 
    include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel/Writer/Excel5.php'); 
    include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel/IOFactory.php'); 
    $objPHPExcel = new PHPExcel(); 

    說明:首先實例化對象後就要測試$objPHPExcel是不是一個對象!若是不是,那就要修改以上加載的問題,若是沒有問題就往下編輯代碼

二、整理數據

  (一) 遍歷數組形式:

          由於個人代碼是通過多層篩選的數據,放在一個二維數組裏,所以,要遍歷數組將數據放在一個對象裏 

          說明:我有兩個數組,第一個數組是  $shfes 放的是列標題;第二個數組是 $prinfo 放的是每列的數據內容,$prinfo 的格式以下圖

//拼數據          
      $i=0;  
      $p=0;             
      while ( $i<=count($shfes)) {  //插入列標題                    
          $objPHPExcel->setActiveSheetIndex(0)->setCellValue(DatabaseSearchForm::$exarr[$i].'1', $shfes[$i]['name']);                   
      $i++;
      }
$exhang=2; foreach ($prinfo as $key=>$value) { //插入每列的內容 for ($s=0; $s <count($value) ; $s++) { $objPHPExcel->setActiveSheetIndex(0)->setCellValue(DatabaseSearchForm::$exarr[$s].$exhang, $value[$s]); } $exhang++; }

    代碼說明:

         一、DatabaseSearchForm::$exarr[$i] 是在Model層定義了一個靜態的$exarr一維數組,存放的是excel 每列的 A、B、C~Z

         二、$exhang 是一個變量從Excel的第2行開始插入

    (二)靜態拼寫數組(僅供參考)

//插入列標題
$objPHPExcel
->setActiveSheetIndex(0) ->setCellValue('A1', '列標題1') ->setCellValue('B1', '列標題2') ->setCellValue('C1', '列標題3') ->setCellValue('D1', '列標題4') ->setCellValue('E1', '列標題5');
//插入每列的內容
if(!empty($model->Goods)){ $i =2; foreach ($model->Goods as $one){ $guige = ''; $guige = $one->StockSpliterValue; $objPHPExcel->setActiveSheetIndex(0) ->setCellValue("A$i", $one->gd_sn) ->setCellValue("B$i", $one->gd_name) ->setCellValue("C$i", "$guige") ->setCellValue("D$i", $one->order_num) ->setCellValue("E$i", $one->stock_num); $i++; } }

三、寫入數據到excel,格式爲.xls

//寫入數據
  $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
  header('Content-Type: application/vnd.ms-excel');  
  header('Content-Disposition: attachment;filename="SMM_'.$price[$products]['type']."_".str_replace('-', '', $sform->start).'.xls"');  
  header('Cache-Control: max-age=0');  
      $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  
      $objWriter->save('php://output');                    

      Yii::app()->end();  
      spl_autoload_register(array('YiiBase','autoload'));                              
      exit();
}
/*導出Excel----數據------------------------------end---------- */

三、寫入數據到excel,格式爲.xlsx

 

 //寫入數據
     $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);                    
     header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');  
     header('Content-Disposition: attachment;filename="SMM_'.$price[$products]['type']."_".str_replace('-', '', $sform->start).'.xlsx"');   
     header('Cache-Control: max-age=0');  
     $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');  
     $objWriter->save('php://output');  
     exit;  
}/*導出Excel----數據------------------------------end---------- */

 

 

 

說明:通過測試修改excel的擴展名是能夠修改的如.xlsx 能夠修改爲 .xls 形式的,其餘代碼不變。

這樣就能夠咯~~效果圖以下

參考博客:

http://blog.csdn.net/xiaojun1288/article/details/7349471

http://blog.csdn.net/alongken2005/article/details/6284635

http://blog.csdn.net/sadfishsc/article/details/7543291

http://www.cnblogs.com/jshen/p/4149812.html

http://www.th7.cn/Program/php/201506/489276.shtml

 

以下是PHPExcelXML導出的案例

 /**
     * @desc 導出全部關鍵字     
     */
    public function actionEchokeyword(){
      $columns = array(
              array('name' => '類型' , 'width' => '183.75'),
              array('name' => '所屬品目' , 'width' => '57.75'),
              array('name' => '關鍵字' , 'width' => '57.75'),
              array('name' => '產品代碼' , 'width' => '57.75'),
              array('name' => '連接地址' , 'width' => '57.75'),
              array('name' => '是否熱門' , 'width' => '57.75'),
              array('name' => '點擊次數' , 'width' => '57.75'),
              array('name' => '最後點擊時間' , 'width' => '57.75'),
          );          
          $key = EnNewsKeywords::model()->findAll();
      foreach ($key as $k){
        $data[] = array(
          $k->type,
          $k->team,         
          empty($k->keywordsName)?'':$k->keywordsName,
          empty($k->productinfo)?'':$k->productinfo,
          $k->link_address,
          empty($k->is_hotkeys)?'否':'是',
          $k->clicknum,
          $k->end_clicktime,
        );
      }        
          $file_name = sprintf('SMM-newKeywords-list-%s',date('Ymd',time()));
          Yii::import('application.extensions.phpexcel.JPhpExcel');
          $xls = new JPhpExcel('UTF-8', false, 'keyword List');
          $xls -> setColumns($columns);
          $xls->addArray($data);
          $xls->generateXML($file_name);
    }
相關文章
相關標籤/搜索