Foros del Web » Programando para Internet » PHP »

mostrar datos de forma horizontal en excel con php

Estas en el tema de mostrar datos de forma horizontal en excel con php en el foro de PHP en Foros del Web. Buenas tardes, vengo con otra duda a ver si me pueden ayudar. tengo esta consulta que exporta los datos de una base de datos a ...
  #1 (permalink)  
Antiguo 07/11/2016, 14:00
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta mostrar datos de forma horizontal en excel con php

Buenas tardes, vengo con otra duda a ver si me pueden ayudar. tengo esta consulta que exporta los datos de una base de datos a un archivo en excel con php.

Código PHP:

<?php

include('conex.php');
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=Reporte_Personal.xls");


        
$conexion=mysql_connect("localhost","root","");
        
mysql_select_db("ejemplo_pdf",$conexion);        


?>
<!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">
  <tr>
    <td colspan="6" bgcolor="skyblue"><CENTER><strong>REPORTE </strong></CENTER></td>
  </tr>
  <tr bgcolor="red">
    <td><strong>NOMBRE</strong></td>
    <td><strong>APELLIDO</strong></td>
    <td><strong>CONCEPTOS</strong></td>
    <td><strong>MONTOS</strong></td>
  </tr>


    <?PHP
    
include('conex.php');
$consul "select nombre, cedula, conceptos, monto from autos";
$resulE pg_query($consul);

while(
$res=pg_fetch_array($resulE)){  

  
$nomcon=$res["nomper"];
  
$nomcon=$res["cedper"];
  
$nomcon=$res["nomcon"]; 
  
$valsal=$res["monto"];   

?>  
 <tr>
    <td><?php echo $nomper?></td>
    <td><?php echo $cedper?></td>
    <td><?php echo $nomcon?></td>
    <td><?php echo $monto?></td>                   
 </tr> 
  

  <?php
}
  
?>
</table>
</body>
</html>
como veran la consulta es normal muestra los datos como se hace generalmente el problema es que son muchos conceptos por cada persona cosa que quedan asi:

|nombre | cedula | conceptos | montos |
jose perez | 1234567 | sueldo basico | 1.000
jose perez | 1234567 | compensaciones | 2.000
jose perez | 1234567 | vaciones | 1.500
jose perez | 1234567 | primas | 1.000
maria rosa | 7654321 | sueldo basico | 1.000
maria rosa | 7654321 | compensaciones | 3.000
maria rosa | 7654321 | vaciones | 5.000
maria rosa | 7654321 | primas | 1.000

y asi con todos, y yo quisiera saber si como es posible que la consulta quedara asi:

nombre | cedula | sueldo basico | compensaciones | vaciones .....
jose perez | 1234567 | 1.000 | 2.000 | 1.500 ....
maria rosa | 7654321 | 1.000 | 2.000 | 5.000 .....

como ven los los conceptos salen de forma horizontal y los montos igual, y asi no se repite nada como en la primera forma los nombre y las cedula e intentado varias maneras pero no lo he logrado. si me pueden ayudar muchasimas gracias de antemano
  #2 (permalink)  
Antiguo 07/11/2016, 14:08
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: mostrar datos de forma horizontal en excel con php

Pues métele td a todas las columnas

Código HTML:
Ver original
  1. <tr>
  2.     <td>col1</td>
  3.     <td>col2</td>
  4.     ...
  5.     <td>colN-1</td>
  6.     <td>colN</td>
  7. </tr>

y lo mismo para todos los datos.

Edito: Si una persona tiene más de una fila con datos distintos, estás en problemas pues...


Última edición por alvaro_trewhela; 07/11/2016 a las 14:34
  #3 (permalink)  
Antiguo 07/11/2016, 16:42
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años, 7 meses
Puntos: 15
Respuesta: mostrar datos de forma horizontal en excel con php

Pues mira viendolo lo primero que deberias hacer es normalizar bien tus tablas. Deberias Tener por ejemplo 3 Auto, Concepto y ConceptoAuto. Con eso te aseguras de saber el numero exacto de columnas de conceptos que tendrias que pintar en la cabecera, luego mediante el select extraes la data en un array, y luego con ese array lo recorres y vas armando tu tabla.

Espero poder haberme explicado mas o menos, en todo caso contactame por correo y te indico mas o menos como hacerlo.

Saludos
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #4 (permalink)  
Antiguo 08/11/2016, 06:50
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Respuesta: mostrar datos de forma horizontal en excel con php

la verdad no entendi como hacerlo, mis conocimientos son basicos, y ese es solo un ejemplo nada mas para dar la idea de lo que necesito, porque la consulta que utilizo es mas compleja, pero solo necesitaria saber como colocar los conceptos en la columna y los montos abajo de cada concepto, que quede como lo indique arriba, he tratado pero no lo logro
  #5 (permalink)  
Antiguo 08/11/2016, 10:37
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: mostrar datos de forma horizontal en excel con php

Lo ideal sería tener la columna de todos los tipos de conceptos para las filas, es decir:

nombre|id|etc...|concepto 1|concepto 2|...|concepto n-1|concepto n

  #6 (permalink)  
Antiguo 08/11/2016, 11:59
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Respuesta: mostrar datos de forma horizontal en excel con php

si pero como haria para las columnas y las filas sean tomadas desde la base de datos, cosa que yo no tenga que hacerlo manual, ya que, no todos tienen la misma cantidad de conceptos, unos tienen mas que otros
  #7 (permalink)  
Antiguo 08/11/2016, 12:33
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: mostrar datos de forma horizontal en excel con php

Fácil, si conceptoN tiene valor 0 puedes hacer un if que diga por ejemplo "no aplica":

if(conceptoN == 0){ echo "no aplica" } o derechamente pones 0

Estoy suponiendo.

Es que tienes que entender que todos los elementos de una tabla tienen todas las columnas de esta, aunque estas sean 0, false, null, vacío etc...

es decir juanito tiene la misma cantidad de columnas que pedro. No son especiales c/u en cuanto a las columnas.


Última edición por alvaro_trewhela; 08/11/2016 a las 12:56
  #8 (permalink)  
Antiguo 09/11/2016, 13:36
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: mostrar datos de forma horizontal en excel con php

cierto pero es que no todos tienen los mismos conceptos que seria los mismo que no tienen el mismos numero de filas por ejemplo:

nombre | cedula | conceptos | montos |
jose perez | 1234567 | sueldo basico | 1.000
jose perez | 1234567 | compensaciones | 2.000
jose perez | 1234567 | vaciones | 1.500
jose perez | 1234567 | primas | 1.000
maria rosa | 7654321 | sueldo basico | 1.000
maria rosa | 7654321 | compensaciones | 3.000
maria rosa | 7654321 | primas | 1.000

nombre | cedula | sueldo basico | compensaciones | vaciones .....
jose perez | 1234567 | 1.000 | 2.000 | 1.500 ....
maria rosa | 7654321 | 1.000 | 2.000 | 1000 .....

hay vez que maria no tiene vaciones, entonces ya hay es una caso, porque cuando yo ponga los conceptos horizontales, se va a mostrar cortado porque entonces en la columna de las vaciones se va a poner el monto que sigue que seria el de las primas por decir algo, y por eso tampoco puedo poner las columnas escritas manualmente porque como le digo en que columna va a poner el monto.

como soy novato se me hace mas dificil y no veo la forma de verdad
  #9 (permalink)  
Antiguo 11/11/2016, 17:27
 
Fecha de Ingreso: julio-2015
Ubicación: Enfrente de la computadora
Mensajes: 4
Antigüedad: 9 años, 4 meses
Puntos: 1
Respuesta: mostrar datos de forma horizontal en excel con php

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>
  #10 (permalink)  
Antiguo 16/11/2016, 13:23
 
Fecha de Ingreso: junio-2013
Mensajes: 94
Antigüedad: 11 años, 5 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

Etiquetas: excel, forma, horizontal, html, mysql, select, usuario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:14.