最近在研究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 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()
上面的函数中,注释掉的是原有的代码。
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')