public function executeExcel() { $formato = $this->getRequestParameter("formato", "CSV"); $this->filters = $this->getUser()->getAttributeHolder()->getAll('sf/formulario/filters'); $c = $this->getCriterio(); $this->addFiltersCriteria($c); $this->addSortCriteria($c); $c->setDistinct(); $datos = FormularioPeer::doSelect($c); foreach ($datos as $formulario) { break; } if (!isset($formulario)) { $id_tabla = isset($this->filters['id_tabla']) ? $this->filters['id_tabla'] : null; if (isset($id_tabla) && $id_tabla != '') { $tabla = TablaPeer::retrievebypk($id_tabla); $formulario = $tabla->getFormulario(); } else { $formulario = new Formulario(); } } $nombre_archivo_tmp = tempnam(sfConfig::get('app_directorio_tmp'), "datos_"); rename($nombre_archivo_tmp, $nombre_archivo_tmp . ".xls"); $nombre_archivo = $nombre_archivo_tmp . ".xls"; error_reporting(E_ALL); $libro_campania = new Spreadsheet_Excel_Writer($nombre_archivo); $cabecera =& $libro_campania->addFormat(); // $cabecera->setBold(); $titulo =& $libro_campania->addFormat(); // $titulo->setBold(); $titulo->setSize(15); if ($formulario->getTabla()) { $nombre_hoja = utf8_decode($formulario->getTabla()->getNombreyEmpresa()); } else { $nombre_hoja = utf8_decode("--"); } $hoja =& $libro_campania->addWorksheet($nombre_hoja); $hoja->writeString(0, 0, "Registros de " . $nombre_hoja, $titulo); $lista_campos_extra = $formulario->getTabla()->getCamposFormularioOrdenados(); //CABECERA $fila = 1; $col = 0; foreach ($lista_campos_extra as $campo) { if (!$campo->getBorrado()) { if ($campo->esTipoLista()) { $campo_txt = "id_item_base"; } if ($campo->esTipoTextoCorto()) { $campo_txt = "texto_corto"; } if ($campo->esTipoTextoLargo()) { $campo_txt = "texto_largo"; } if ($campo->esTipoNumero()) { $campo_txt = "numero"; } if ($campo->esTipoFecha()) { $campo_txt = "fecha"; } if ($campo->esTipoBooleano()) { $campo_txt = "si_no"; } if ($campo->esTipoSelectPeriodo()) { $campo_txt = "id_item_base"; } if ($campo->esTipoTabla()) { $campo_txt = "numero"; } if ($campo->esTipoObjeto()) { $campo_txt = "numero"; } $hoja->writeString($fila, $col, $campo->__toString(), $cabecera); $col++; } } //FILAS foreach ($datos as $formulario) { $col = 0; $fila++; $items_formulario = $formulario->getArrayItems(); foreach ($lista_campos_extra as $campo) { if (!$campo->getBorrado()) { if (!$campo->esTipoLista()) { $item_base = $campo->getElementoUnico(); $item = isset($items_formulario[$item_base->getIdItemBase()]) ? $items_formulario[$item_base->getIdItemBase()] : null; } else { $item = null; $lista = $campo->getItemBases(); foreach ($lista as $ib) { if (isset($items_formulario[$ib->getIdItemBase()])) { $item = $items_formulario[$ib->getIdItemBase()]; break; } } } if ($item) { $hoja->write($fila, $col, utf8_decode($item->__toString(true))); } $col++; } } } $libro_campania->send("Registros de " . $nombre_hoja . ".xls"); //cabeceras HTTP $libro_campania->close(); $gestor = fopen($nombre_archivo, "rb"); fpassthru($gestor); fclose($gestor); @unlink($nombre_archivo); exit; }