最近在研究PHP的Yii框架,很喜歡,碰到導出Excel的問題,研究了一下,就有了下面的方法:
1、首先在config\main.php中添加對PHPExcel的引用,我的方式是這樣:
1 2 3 4 5 6 7 8// autoloading model and component classes
'import'
=>
array
(
'application.models.*'
,
'application.components.*'
,
'application.extensions.phpexcel.*'
,
),
另外也有人用components 這個配置,但是我的有問題,所以就用上面的方法。
2、按照下面的代碼修改PHPExcel代碼目錄裡的Autoloader.php文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16public
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()
上面的函數中,注釋掉的是原有的代碼。
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);
$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 );
$objectPHPE