[SOLUCIONADO]Problemas en la salida a Excel

Hola. Estamos teniendo el problema que cuando se desea descargar los archivos excel se visualiza la pantalla donde muestra el contenido que va a tener el archivo, con todos símbolos extraños o que el archivo esta roto. Versión de toba instalada 2.5.4.El servidor tiene debian 7.7 + apache 2.2 + php 5.4.4 + postgres 8.4. Nos faltará alguna configuración extra??
Saludos

Cuando me ha pasado, es porque en el código del CI, o de la consulta que carga el cuadro, se ha interrumpido por tener una línea con ECHO o PRINT_R.

Buen día

Controlamos el código y no estamos utilizando ni un ECHO ni PRINT_R. Lo raro es que hay otros cuadros en el mismo proyecto que si se pueden exportar a excel…
Saludos.

Hola Sonia,

lo primero que se me ocurre si es que estas viendo el contenido del archivo por pantalla, es que el browser no este identificando correctamente lo que recibe, lo que podria derivar de un header que no se envia correctamente antes de hacer la descarga (de modo que el browser identifique el mime-type).

Opciones para que eso suceda pueden ser:

  • Estan enviando los headers manualmente y olvidaron enviar uno para el excel.

  • Hay algo que esta saliendo antes y automaticamente PHP envia los headers validos para html en lugar de excel.

Como es que estan llevando adelante la descarga del archivo, tenes el codigo a mano?

Saludos

Hola Richard, lo que hacemos es solo tildar la opción “Exportar a Excel” del cuadro en el toba_editor por lo que no hay código.
Saludos y gracias!!!

Hola Sonia,

no es necesario que haya codigo, un notice por un indice indefinido en un arreglo te puede sacar un texto que envie los headers. Un caracter (de los no visibles) en otro encoding puede complicarte tambien.

Lo que me lleva a pensar que es algo puntual, es justamente que otras exportaciones si te estan funcionando, de hecho yo estoy probando en el proyecto de referencia y no estoy teniendo ningun inconveniente.

Si fuera un problema del browser, pasaria con todos los listados… si fuera algo a nivel sistemico, seria lo mismo… tiene que ser algo particular en dicha operacion, aun cuando no esten enviando nada manualmente.

Podrias adjuntarme lo que les sale por pantalla cuando intentan exportar el archivo?.

Saludos

Hola Richard, adjunto prints de pantallas de los dos casos que tenemos, caso1 y caso2.

Lo que tenemos en común entre estos listados es que dependiendo del grupo de acceso eliminamos eventos o no de la siguiente manera:

$this->dependencia(‘cuadro’)->eliminar_evento(‘eliminar’);

Saludos y gracias!!!


caso1a.png

caso1a.png

caso1b.png

caso1b.png

caso2a.png

caso2a.png

Hola Sonia,

yo estaba esperando mas el contenido del archivo xls para poder probarlo en mi maquina y ver si encontraba que estaba rompiendo el formato.

Lo que tenemos en común entre estos listados es que dependiendo del grupo de acceso eliminamos eventos o no de la siguiente manera: $this->dependencia('cuadro')->eliminar_evento('eliminar');

Supongo que probaron comentando esa linea para ver si tiene alguna injerencia en el asunto, lo que me lleva a pensar que tiene que ser otra cuestion. Segun veo de la primera imagen pareciera que la linea 1 esta compuesta por espacios, cuando en realidad deberia contener codigo binario tambien.

Pasame si podes el xls y de paso el codigo del CI que tira el listado.

Saludos

Hola Richard, te pido disculpas por la confusión. En cuanto a comentar el código, si claro que lo hicimos y no soluciona el problema.
Adjunto los archivos xls y a continuación dejo el código de cada caso.

El cuadro del primer caso se llena con:
function conf__cuadro_deposito(toba_ei_cuadro $cuadro)
{
// Tomamos la lista de grupos a los que pertenece un usuario,
// y verificamos que pertenezca a alguno de los que nos interesa

        $grupos=toba::usuario()->get_grupos_acceso();

        $pertenece = false;
        $consulta = false;
        $this->s__pilaga = false;
        $this->s__central = false;
        
        foreach($grupos as $grupo)
        {
            $pertenece = $pertenece || $grupo == 'admin' || $grupo == 'asig_central' || $grupo == 'asig_depositos' || $grupo == 'con_asig';
            if($grupo == 'con_asig'){

                $consulta = true;
            }
            if($grupo == 'asig_central'){

                $consulta = true;
            }
            
            if($grupo == 'asig_pilaga'){
                $this->s__pilaga = true;
            }
            
            if($grupo == 'asig_depositos'){
                $this->s__central = true;
            }
        }
        if(!$pertenece or $consulta)
        {
            // Si el usuario no pertenece a uno de los grupos
            // administradores, solamente puede ver sus rendiciones    
            $this->s__filtro['asi_usuario']=toba::usuario()->get_id();
            $this->dependencia('cuadro_deposito')->eliminar_evento('Aprobado');
            $this->dependencia('cuadro_deposito')->eliminar_evento('Rechazado');

            if($consulta)
            {
                $this->dependencia('cuadro_deposito')->eliminar_evento('agregar_deposito');
            } 
        }

        if(isset($this->s__filtro['asi_det_periodo']))
        {
            $datos=soe_consultas::get_depositos($this->s__filtro);
            $cuadro->set_datos($datos);
        }
} 

El cuadro del segundo caso se llena con:
//-----------------------------------------------------------------------------------
//---- cuadro_retenciones -----------------------------------------------------------
//-----------------------------------------------------------------------------------

function conf__cuadro_retenciones(toba_ei_cuadro $cuadro)
{
        $dep_id=$this->s__filtro['dependencia'];
        $periodo=$this->s__filtro['periodo'];
        $id_tipo=$this->s__filtro['tipo_retencion'];
        $asi_est_id=$this->s__filtro['asi_est_id'];
        $est_id_deposito=$this->s__filtro['est_id_deposito'];
        $id_impuesto=$this->s__filtro['id_impuesto'];
      
        $datos=retenciones_consultas::listado_retenciones($dep_id, 
                                                          $periodo, 
                                                          $id_tipo, 
                                                          $asi_est_id,
                                                          $est_id_deposito,
                                                          $id_impuesto);
        
        $cuadro->set_datos($datos);
}

Saludos y muchas gracias.


archivos.zip (14.7 KB)

Hola Sonia,

ambos excel arrancan con un caracter de control en hexadecimal, en un caso se trata de A0 (Un LF) y en el otro un 20 (Comienzo de texto). Fijense en los archivos involucrados en la operacion si no les quedo algun enter o algun caracter en otro encoding fuera de los delimitadores de PHP, suele ser la causa mas comun en estos casos.

Saludos

Muchas gracias Richard!!! Siguiendo tus consejos logramos solucionar este tema. Controlamos los archivos y había un par que tenían un espacio antes de abrir la marca de php.
Saludos.