最近在研究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 | 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 ;
} //functionRegister() |
上面的函数中,注释掉的是原有的代码。
3、下面的代码是输出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);