Yii框架中使用PHPExcel導出Excel文件

最近在研究PHP的Yii框架,很喜歡,碰到導出Excel的問題,研究了一下,就有了下面的方法:php

 

一、首先在config\main.php中添加對PHPExcel的引用,個人方式是這樣:session

1
2
3
4
5
6
7
8
// autoloading model and component classes
     'import' => array (
               
         'application.models.*' ,
         'application.components.*' ,
         'application.extensions.phpexcel.*' ,
            
     ),

另外也有人用components 這個配置,可是個人有問題,因此就用上面的方法。app

 

二、按照下面的代碼修改PHPExcel代碼目錄裏的Autoloader.php文件:框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public  static  function  Register() {
         $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()

上面的函數中,註釋掉的是原有的代碼。ide

 

三、下面的代碼是輸出Excel,以及一些經常使用的屬性設置,在你的controller中:函數

     

    public  function actionExport()
     {
         $objectPHPExcel  new  PHPExcel();
         $objectPHPExcel ->setActiveSheetIndex(0);
    
         $page_size  = 52;
         //數據的取出
         $model  = Yii::app()->session[ 'printdata' ];
    
         $dataProvider  $model ->search();
    
         $dataProvider ->setPagination(false);
         $data  $dataProvider ->getData();
         $count  $dataProvider ->getTotalItemCount();
         //總頁數的算出
         $page_count  = (int)( $count / $page_size ) +1;
         $current_page  = 0;
    
         $n  = 0;
         foreach  $data  as  $product  )
         {
             if  $n  $page_size  === 0 )
             {
                 $current_page  $current_page  +1;
    
                 //報表頭的輸出
                 $objectPHPExcel ->getActiveSheet()->mergeCells( 'B1:G1' );
                 $objectPHPExcel ->getActiveSheet()->setCellValue( 'B1' , '產品信息表' );
    
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'B2' , '產品信息表' );
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'B2' , '產品信息表' );
                 $objectPHPExcel ->setActiveSheetIndex(0)->getStyle( 'B1' )->getFont()->setSize(24);
                 $objectPHPExcel ->setActiveSheetIndex(0)->getStyle( 'B1' )
                     ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'B2' , '日期:' . date ( "Y年m月j日" ));
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'G2' , '第' . $current_page . '/' . $page_count . '頁' );
                 $objectPHPExcel ->setActiveSheetIndex(0)->getStyle( 'G2' )
                     ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
                    
                 //表格頭的輸出
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'A' )->setWidth(5);
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'B3' , '編號' );
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'B' )->setWidth(6.5);
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'C3' , '名稱' );
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'C' )->setWidth(17);
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'D3' , '生產廠家' );
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'D' )->setWidth(22);
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'E3' , '單位' );
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'E' )->setWidth(15);
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'F3' , '單價' );
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'F' )->setWidth(15);
                 $objectPHPExcel ->setActiveSheetIndex(0)->setCellValue( 'G3' , '在庫數' );
                 $objectPHPExcel ->getActiveSheet()->getColumnDimension( 'G' )->setWidth(15);
                    
                 //設置居中
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3' )
                     ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    
                 //設置邊框
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3'  )
                     ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3'  )
                     ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3'  )
                     ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3'  )
                     ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3'  )
                     ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    
                 //設置顏色
                 $objectPHPExcel ->getActiveSheet()->getStyle( 'B3:G3' )->getFill()
                     ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB( 'FF66CCCC' );
                    
             }
             //明細的輸出
             $objectPHPExcel ->getActiveSheet()->setCellValue( 'B' .( $n +4) , $product ->id);
             $objectPHPExcel ->getActiveSheet()->setCellValue( 'C' .( $n +4) , $product ->product_name);
             $objectPHPExcel ->getActiveSheet()->setCellValue( 'D' .( $n +4) , $product ->product_agent->name);
             $objectPHPExcel ->getActiveSheet()->setCellValue( 'E' .( $n +4) , $product ->unit);
             $objectPHPExcel ->getActiveSheet()->setCellValue( 'F' .( $n +4) , $product ->unit_price);
             $objectPHPExcel ->getActiveSheet()->setCellValue( 'G' .( $n +4) , $product ->library_count);
             //設置邊框
             $currentRowNum  $n +4;
             $objectPHPExcel ->getActiveSheet()->getStyle( 'B' .( $n +4). ':G' . $currentRowNum  )
                     ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
             $objectPHPExcel ->getActiveSheet()->getStyle( 'B' .( $n +4). ':G' . $currentRowNum  )
                     ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
             $objectPHPExcel ->getActiveSheet()->getStyle( 'B' .( $n +4). ':G' . $currentRowNum  )
                     ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
             $objectPHPExcel ->getActiveSheet()->getStyle( 'B' .( $n +4). ':G' . $currentRowNum  )
                     ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
             $objectPHPExcel ->getActiveSheet()->getStyle( 'B' .( $n +4). ':G' . $currentRowNum  )
                     ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
             $n  $n  +1;    
         }
    
         //設置分頁顯示
         //$objectPHPExcel->getActiveSheet()->setBreak( 'I55' , PHPExcel_Worksheet::BREAK_ROW );
         //$objectPHPExcel->getActiveSheet()->setBreak( 'I10' , PHPExcel_Worksheet::BREAK_COLUMN );
         $objectPHPExcel ->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);
         $objectPHPExcel ->getActiveSheet()->getPageSetup()->setVerticalCentered(false);
    
    
         ob_end_clean();
         ob_start();
    
         header( 'Content-Type : application/vnd.ms-excel' );
         header( 'Content-Disposition:attachment;filename="' . '產品信息表-' . date ("Y年m月j日 ").'.xls" ');
         $objWriter = PHPExcel_IOFactory::createWriter( $objectPHPExcel , 'Excel5' );
         $objWriter ->save( 'php://output' );

代碼執行後,會直接生成Excel,並提示下載或打開。spa

相關文章
相關標籤/搜索