最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法:
1、首先在config/main.php中添加对PHPExcel的引用,我的方式是这样:
| 12345678 | //autoloadingmodelandcomponentclasses'import'=>array('application.models.*','application.components.*','application.extensions.phpexcel.*',), |
另外也有人用components这个配置,但是我的有问题,所以就用上面的方法。
2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件:
| 12345678910111213141516 | publicstaticfunctionRegister(){$functions=spl_autoload_functions();foreach($functionsas$function)spl_autoload_unregister($function);$functions=array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);foreach($functionsas$function)$x=spl_autoload_register($function);return$x;}//functionRegister() |
上面的函数中,注释掉的是原有的代码。
3、下面的代码是输出Excel,以及一些常用的属性设置,在你的controller中:
publicfunctionactionExport(){$objectPHPExcel=newPHPExcel();$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($dataas$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);
新闻热点
疑难解答