Hola a todos, les tengo una pequeña duda.

Resulta que hice un reporte con phpexcel y tengo el problema de que cuando hago render de la vista que muestra el reporte (download xls), no me descarga el archivo como excel, sino que me hace un echo textual del objeto excel generado, algo como esto:

ÐÏ à¡± á; þÿ þÿÿÿþÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ì Ñ B ° = ¼%r 8 X " 1 Ü Verdana1 à õÿ À à õÿ À à “ €ÿ’â8ÿÿÿ–––ÿÿÿÿÿÿÿÿ€€€€€€€€€ÀÀÀ€€€™™ÿ™3fÿÿÌÌÿÿffÿ€€fÌÌÌÿ€ÿÿÿÿÿÿ€€€€€ÿÌÿÌÿÿÌÿÌÿÿ™™Ìÿ WorksheetÁ Á gæ ® ü Participants list Id Nombre nombre-0 nombre-1 nombre-2 nombre-3 nombre-4 ......

Para ello realice este ejemplo
http://bakery.cakephp.org/articles/melgior/2010/01/26/simple-excel-spreadsheet-helper



El header obviamente no esta funcionando, siendo que existe una *funcion en el helper* que tengo que lo cambia..

function output($title) {
header("Pragma: public");
header("Expires: 0");
header("Content-type: application/vnd.ms-excel");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Disposition: attachment;filename=$title.xls");
$objWriter = new PHPExcel_Writer_Excel5($this->xls);
$objWriter->setTempDir(TMP);
$objWriter->save('php://output');
}

*controlador*
function descargar_reporte($pid=null,$cid){
Configure::write('debug', 0);
$this->layout = 'ajax';
$this->autoRender = false;
.....
$this->set('practico', $data);
$this->render("descargar_reporte","ajax");
}

*y en mi vista*
<?php $excel->generate($practicos, 'Participants list '); ?>

fix encontrado (artesanal)
setear los headers en la accion del controlador, crear la una tabla html dinamicamente y luego hacer echo, esto no me convence porque ms excel no lo reconoce 100% (aunque si se puede abrir y revisar sin problemas). pero esta feo.
*controlafor*
function descargar_reporte($pid=null,$cid){
Configure::write('debug', 0);
$this->layout = 'ajax';
$this->autoRender = false;
header("Pragma: public");
header("Expires: 0");
header("Content-type: application/vnd.ms-excel charset=utf-8");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Disposition: attachment;filename=archivo.xls");
foreach($etapas as $etapa):
$reporte = $reporte."<tr>";
$reporte = $reporte."<td><strong>".utf8_decode($etapa["Etapa"]["titulo"])."</strong></td>";
$reporte = $reporte."<td>".$etapa["Etapa"]["id"]."</td>";
$reporte = $reporte."</tr>";
endforeach;
$reporte = $reporte."</table>";
echo $reporte;
die;
}

Resumiendo, existe alguna forma de obviar el render, ya que automaticamente me agrega unos divs y otras cosas html que invalidan mi archivo excel. Como usar un layout y setearle los headers a mano de alguna forma????

intente agregar los headers a un nuevo layout, pero el render del accion sigue agregando cosas de mas...


alguna idea, ayuda, comentario o consulta??????
por favor...

saludos cordiales

--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP-es" de Grupos 
de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a 
[email protected].
Para anular tu suscripción a este grupo, envía un correo electrónico a 
[email protected]
Para tener acceso a más opciones, visita el grupo en 
http://groups.google.com/group/cakephp-es?hl=es.

Responder a