Yii框架使用PHPExcel導(dǎo)出Excel文件的方法分析【改進版】
本文實例講述了Yii框架使用PHPExcel導(dǎo)出Excel文件的方法。分享給大家供大家參考,具體如下:
最近在研究PHP的Yii框架,很喜歡,碰到導(dǎo)出Excel的問題,研究了一下,就有了下面的方法:
1、首先在config\main.php中添加對PHPExcel的引用,我的方式是這樣:
// autoloading model and component classes 'import'=>array( /*'application.modules.srbac.controllers.SBaseController',*/ 'application.models.*', 'application.components.*', 'application.extensions.phpexcel.*', ),
另外也有人用components 這個配置,但是我的有問題,所以就用上面的方法。
2、按照下面的代碼修改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()
上面的函數(shù)中,注釋掉的是原有的代碼。
3、下面的代碼是輸出Excel,以及一些常用的屬性設(shè)置,在你的controller中:
/* 導(dǎo)出為Excel */ public function actionExport() { $objectPHPExcel = new PHPExcel(); $objectPHPExcel->setActiveSheetIndex(0); $page_size = 52; //數(shù)據(jù)的取出 $model = Yii::app()->session['printdata']; $dataProvider = $model->search(); $dataProvider->setPagination(false); $data = $dataProvider->getData(); $count = $dataProvider->getTotalItemCount(); //總頁數(shù)的算出 $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','產(chǎn)品信息表'); $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','產(chǎn)品信息表'); $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','產(chǎn)品信息表'); $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','生產(chǎn)廠家'); $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','在庫數(shù)'); $objectPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15); //設(shè)置居中 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3') ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //設(shè)置邊框 $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); //設(shè)置顏色 $objectPHPExcel->getActiveSheet()->getStyle('B3:G3')->getFill() ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF66CCCC'); } //明細(xì)的輸出 $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); //設(shè)置邊框 $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; } //設(shè)置分頁顯示 //$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="'.'產(chǎn)品信息表-'.date("Y年m月j日").'.xls"'); $objWriter= PHPExcel_IOFactory::createWriter($objectPHPExcel,'Excel5'); $objWriter->save('php://output'); }
代碼執(zhí)行后,會直接生成Excel,并提示下載或打開。
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。
相關(guān)文章
Thinkphp自定義美化success和error提示跳轉(zhuǎn)頁面代碼實例
這篇文章主要介紹了Thinkphp自定義美化success和error提示跳轉(zhuǎn)頁面代碼實例,有需要的同學(xué)可以直接借鑒文中代碼,可以增加頁面的美觀和友好程度2021-03-03php框架CI(codeigniter)自動加載與自主創(chuàng)建對象操作實例分析
這篇文章主要介紹了php框架CI(codeigniter)自動加載與自主創(chuàng)建對象操作,結(jié)合實例形式分析了codeigniter框架自動加載與自主創(chuàng)建對象相關(guān)原理、實現(xiàn)方法與相關(guān)注意事項,需要的朋友可以參考下2020-06-06destoon實現(xiàn)VIP排名一直在前面排序的方法
這篇文章主要介紹了destoon實現(xiàn)VIP排名一直在前面排序的方法,在destoon開發(fā)中非常實用,需要的朋友可以參考下2014-08-08swoole_process實現(xiàn)進程池的方法示例
這篇文章主要介紹了swoole_process實現(xiàn)進程池的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Codeigniter(CI)框架分頁函數(shù)及相關(guān)知識
文章主要介紹了一個自己封裝的Codeigniter(CI)框架的分頁函數(shù)以及Codeigniter(CI)框架分頁類的使用心得,非常簡單實用,希望對大家能有所幫助2014-11-11codeigniter集成ucenter1.6雙向通信的解決辦法
用codeigniter開發(fā)一個子網(wǎng)站,之后想和原來的論壇進行同步,包括同步登陸和雙向通信。這篇文章主要介紹了codeigniter集成ucenter1.6雙向通信的解決辦法,需要的朋友可以參考下2014-06-06laravel5.5框架的上傳圖片功能實例分析【僅傳到服務(wù)器端】
這篇文章主要介紹了laravel5.5框架的上傳圖片功能,結(jié)合實例形式分析了laravel5.5框架將圖片上傳到服務(wù)器端的相關(guān)操作技巧與注意事項,需要的朋友可以參考下2019-12-12