Phpexcel Exportar Cgridview A Excel Dinamico

Hola lo que quiero es exportar desde un admin que esta en la carpeta /protected/view/correspondenciaentrada/admin.php a un excel segun lo que filtre el usuario

la libreria que utilizo es phpexcel y la pegue en extensions. lo que llevo hasta ahora es un reporte general que no me sirve porque son aproximadamente 9000 registros y tarda toda una vida, aparte de eso no es lo que quiere el usuario. agradezco mucho su ayuda

describo como hice para hacer el reporte general

cree un archivo y lo pegue en /protected/views/correspondenciaentrada/reporteexcel.php


<?php


//Buscar toda la correspondencia

$correspondencias_titulo = array("CORRESPONDENCIA RECIBIDA");

$correspondencias = array();




//TODO Lo siguiente podria hacerse en un foreach/for para mejorar el codigo 

$condicion = array('id_perfil'=>'16');

$orden = array('order'=>'corr_anio');

$correspondencias[0] = Correspondenciaentrada::model()->findAllByAttributes($condicion,$orden);


$k=0; 

$array_data = array();

$cor=0; //para manejar el indice de las correspondencias

foreach($correspondencias as $correspondencia){

	if($correspondencia){

	

        	$i=1;

        	foreach($correspondencia as $corr){

            	

            	//formateo necesario de la data que viene de las BD

            	

            	$fecha_registro = date("d/m/Y",strtotime($corr->fecha_registro));

            	$fecha_documento=  date("d/m/Y",strtotime($corr->fecha_documento));

            	if ($corr->tipo_documento->descripcion=='Seleccione'){

                	$corr->tipo_documento->descripcion='';

            	}

            	else{}

            	//Armamos el arreglo bidimensional con la data que va al excel

            	$array_data[$cor][$k] = array(

                 		$i,

                 		$corr->corr_anio,

                 		$corr->nro_docum,

                 		$fecha_registro,

                 		$fecha_documento,

                 		$corr->tipo_documento->descripcion,

                 		$corr->idOrigen->descripcion,

                 		$corr->titulo,

                 		$corr->nombre_persona,

                	

            	);

            	$k++; //aumentamos el contador que maneja la posicion de la correspondencia en cada arreglo

            	$i++; //aumentamos el contrador que se usa para mostrar el nro (primer campo) del listado segun modelo

                       		

        	}

	}

	$cor++;

}


//desde aqui iteramos con la data

                    	Yii::import("ext.phpexcel.PHPExcel");


                    	$objPHPExcel = new PHPExcel();

                    	

                    	$objPHPExcel->getProperties()

                        	->setCreator("OTIDO-MPPTT")

                        	->setLastModifiedBy("OTIDO-MPPTT")

                        	->setTitle("Listado General Correspondencia Recibida ".date("d-m-Y-hia"))

                        	->setSubject("Listado General Correspondencia Recibida")

                        	->setDescription("Documento generado para Vicemnisterio")

                        	->setKeywords("Siscor otido")

                        	->setCategory("Reportes");

                    	

                    	$titulos = array(

                        	"Nro",

                        	"Nro Corr.",

                        	"Nro Doc.",

                        	"Fecha Registro",

                        	"Fecha Doc.",

                        	"Tipo Documento",

                        	"Origen",

                        	"Asunto",

                        	"Persona Contacto"

                        	

                    	);

                    	//generamos cada libro por data de correspondencia

               		$cor=0; //iniciamos el primer libro que es el corresponde a la primera correspondencia

                  	foreach ($array_data as $data){ //recorremos el array de datas por correspondencia, una a una

                      	

                    	if($cor != 0){

                        	$objPHPExcel->createSheet(); //solo se crea un nuevo libro para las siguientes 


                    	}

                  	

                    	$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&C&HPlease treat this document as confidential!');

                    	$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPágina &P de &N'); //numero de paginas y alineacion de numero de paginas


                    	$objPHPExcel->setActiveSheetIndex($cor); //activamos la pestaña/libro para la correspondencia actual segun indice

                    	$objPHPExcel->getActiveSheet()->setTitle($correspondencias_titulo[$cor]); //le colocamos el titulo que se corresponda a la pestaña/libro  segun arreglo de titulos de correspondencia

                    	$objPHPExcel->getActiveSheet()->fromArray($titulos, null, 'A1'); //seteamos los titulos de la data

                    	$objPHPExcel->getActiveSheet()->fromArray($data, null, 'A2');  //plasmamos la data en el archivo y la hoja activa

                    	

                  	$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);

                  	$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);

                  	$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);

                  	$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(20);

                  	$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(60);

                  	$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(12);

                    	

                    	$cor++;  //nos vamos a la data de la siguiente correspondencia

                  	}

                  	

                  	$objPHPExcel->setActiveSheetIndex(0); //colocamos por defecto que se vea la primera pestaña/libro

                  	

                    	ob_end_clean();

                    	ob_start();


                    	header('Content-Type: application/vnd.ms-excel');

                    	header('Content-Disposition: attachment;filename="LISTADO_GENERAL_CORRESPONDENCIA_RECIBIDA_'.date("d-m-Y-hia").'.xls"');

                    	header('Cache-Control: max-age=0');

                    	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

                    	$objWriter->save('php://output');

        	

            	exit();

	

?>



en el admin.php dentro del $this->menu=array() agregue la siguiente linea de codigo para abrir el archivo excel


 array('label'=>'Excel ', 'url'=>array('excel'), 'visible' =>$perfilu=='16'), 

en el CorrespondenciaentradaController.php agregar la funcion




public function actionExcel()

		{

    		$this->render('reporteexcel');

		}

    	



y le agregamos la funcion excel en public function accessRules() {}




array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update','pdf','excel'),

				'users'=>array('@'),

			),



ahora no quiero traerme todos los registros de la tabla sino los que el usuario escoga en el admin de correspondencia.