Ver Mensaje Individual
  #10 (permalink)  
Antiguo 16/11/2016, 13:23
jecavi_20
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: mostrar datos de forma horizontal en excel con php

Cita:
Iniciado por VanFoster Ver Mensaje
El problema que planteas lo puedes solucionar con más fácilmente con php y deberás realizar un pre proceso de tu set de datos para dejarlo como lo requieres en el reporte; este detalle es más común de lo que pensamos y no precisamente se debe a que tu diseño de base de datos sea incorrecto, al contrario en tu caso por lo que veo es totalmente correcto y no requieres realizar modificaciones a tu DB; simple y sencillamente los reportes cuanto mas complejos son o cambias la perspectiva desde la que se desea analizar los datos te alejas fácilmente de tu modelo de BD planteado.
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>LISTA DE USUARIOS</title> 
</head> 
<body> 

<table width="100%" border="1" cellspacing="0" cellpadding="0"> 
    <?PHP      
include('conex.php'); 
$consul "select nombre, cedula, conceptos, monto from autos"
$resulE pg_query($consul); 
$columnas=array('nombre','cedula');//Columnas del reporte, agregaremos posteriormente una posición por cada concepto distinto
$reporte=array();//Array Asociativo(Realmente Matriz), cada index es la cedula, estoy suponiendo que no hay mas de una persona con la misma cedula

while($res=pg_fetch_array($resulE)){//Recorremos todo el set de resultados para vaciar los datos en $reporte ya con la estructura que queremos 
  
if(!in_array($columnas))$columnas[]=$res["conceptos"];//Si no existe el concepto en el array de columnas  lo agregamos
  
  
if(!isset($reporte[$res["cedula"]]))$report[$res["cedula"]]=array(//Inicializamos una posicion del array $report por cada persona
      
'nombre'=>$res["nombre"],
      
'cedula'=>$res["cedula"]
  );
  
$persona=&$reporte[$res["cedula"]];//Guardamos referencia, solo para no arrastrar teclas
  
  //Parte central de la solucion del problema, aqui agregamos un indice  al array $persona por cada concepto distinto,
  // estamos trabajando sobre segundo nivel de array $reporte y $persona tomalo como un alias de $reporte[$res["cedula"]].
  // El indice Será la descripcion del concepto.
  
  
if(!isset($persona[$res["conceptos"]]))$persona[$res["conceptos"]]=0;
  
  
//Sumamos el monto en el indice del concepto.
  
$persona[$res["conceptos"]]+=$res["monto"];
}

//--------------->Ahora Imprimimos el reporte

//Encabezado de reporte, el colspan depende de las columnas que se hayan detectado
echo '<tr><td colspan="'.($lencol=count($columnas)).'" bgcolor="skyblue"><CENTER><strong>REPORTE </strong></CENTER></td></tr>';

//--------------->Imprimir Titulos de columnas
echo '<tr bgcolor="red">';
for(
$i=0;$i<$lencol;$i++)echo "<td>{$columnas[$i]}</td>";
echo 
'</tr>';
//--------------->Imprimir Datos
foreach($reporte as $cedula=>$persona){
    echo 
'<tr>';
    for(
$i=0;$i<$lencol;$i++){
        
$valor=isset($persona[$columnas[$i]])?$persona[$columnas[$i]]:'';//SI no existe la columna en la persona no se imprime nada
        
echo "<td>{$valor}</td>";
    }
    echo 
'</tr>';
}

/*
Intentaré graficar la estructura que quiero que tenga la variable $reporte por si me equivoque arriba:

$reporte{
    '0001'=>{
        'nombre'=>'Yo',
        'cedula'=>'0001',
        'compensaciones '=>100,
        'vacaciones'=>500    
    },
    '0002'=>{
        'nombre'=>'Tu',
        'cedula'=>'0002',
        'sueldos y salarios'=>1000,
        'vales'=>'300'    
    }
    
}

$columnas{
    0=>'nombre',
    1=>'cedula',
    2=>'compensaciones',
    3=>'vacaciones',
    4=>'sueldos y salarios',
    5=>'vales'
}
*/

?> 
</table> 
</body> 
</html>
disculpa que tarde tanto en responder es que estaba en otras cosa, pero muchas gracias probare este codigo a ver que tal y despues doy respuesta de como me fue con el