Foros del Web » Programando para Internet » PHP »

Generar reportes en excel desde php + postgres

Estas en el tema de Generar reportes en excel desde php + postgres en el foro de PHP en Foros del Web. Hola como estan, miren e revisado por muchos sitios en donde es muy conocida la migracion de dats desde una consulta en php hacia excel, ...
  #1 (permalink)  
Antiguo 09/03/2009, 08:14
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 2 meses
Puntos: 0
Generar reportes en excel desde php + postgres

Hola como estan, miren e revisado por muchos sitios en donde es muy conocida la migracion de dats desde una consulta en php hacia excel, pero solo e encontrado desde mysql....

lo que necesito es super simple, recibo un arreglo que es el resultado de una consulta y necesito mostrar el resultado de en una planilla excel pq es necesario revisar algunos costos con estas y la forma clara de manejar estos datos es por medio de excel... sino lo saco en pdf, pq tengo ese codigo xD....

la cosa es como hago eso para no perder el orden de los datos , que cada fila sea un resultado en fin...

De antemano muchas gracias a todos.
  #2 (permalink)  
Antiguo 09/03/2009, 10:17
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Generar reportes en excel desde php + postgres

Si ya encontraste la informacion para mysql, entonces lo unico que cambia para Postgres es la conexion y las respectivas consultas, por que lo demas (gegerar el archivo excel) es puro php
  #3 (permalink)  
Antiguo 09/03/2009, 13:23
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Generar reportes en excel desde php + postgres

Vale pero me pasa lo siguiente

entra a la funcion creada pero me envia un error...al enviar los parametro a la funcion esa en mysql , pero mira lo que hice fue nada mas que insertar el arreglo que me llega de mi consulta .. eh mira este es el codigo que dice que esta bien en el foro en que lo encontre .. ya tengo los archivos requeridos el excel.php y el otro...

require_once("excel.php");
require_once("excel-ext.php");
// Consultamos los datos desde MySQL
$conEmp = mysql_connect("localhost", "userDB", "passDB");
mysql_select_db("sampleDB", $conEmp);
$queEmp = "SELECT nombre, direccion, telefono FROM empresa";
$resEmp = mysql_query($queEmp, $conEmp) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);
// Creamos el array con los datos
while($datatmp = mysql_fetch_assoc($resEmp)) {
$data[] = $datatmp;
}
// Generamos el Excel
createExcel("excel-mysql.xls", $data);
exit;


ahora si yo tengo la conexion a postgresql con una clase conexion a la cual simplemete creo una db y luego la consulta... que hacer?? tengo que poner esos datos de localhost, userdb y pass pq yo ya tenog echa esa consulta en un arreglo...

de antemano gracias
  #4 (permalink)  
Antiguo 09/03/2009, 17:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Respuesta: Generar reportes en excel desde php + postgres

Hombre igual si pones el error que te lanza ayudas!

Salu2
  #5 (permalink)  
Antiguo 10/03/2009, 15:58
 
Fecha de Ingreso: diciembre-2007
Mensajes: 385
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Generar reportes en excel desde php + postgres

Hola bueno para generar el documento excel te recomiendo que utilices la libreria SpreadSheet Excel Writer desde aca -------- > http://pear.php.net/package/Spreadsh...riter/download y aca te dejo un ejemplo de como usarla (esta con Postgre):

Código PHP:

<?php
require_once 'Spreadsheet/Excel/Writer.php';
include_once(
"./include_php/conexion.php");
$conn conexion();

$SELECT_SECTOR_NINO "SELECT fu_obtener_edad(fecha_nac_nino,CURRENT_DATE) as edad, nino.id_nino, nino.nombre_nino, nino.apellido_paterno_nino, apellido_materno_nino, nino.direccion_nino, nino.sector_nino, nino.fono_fijo, nino.fono_movil, nino.fono_referencia, educacion.nombre_escuela_nino, educacion.curso_nino, educacion.repeticion_u_ano_nino, educacion.motivo_repitencia_nino, salud.estado_salud_nino, salud.discapacidad_nino, salud.tipo_discapacidad_nino
 FROM nino left join educacion on nino.id_nino = educacion.id_nino left join salud on nino.id_nino = salud.id_nino
     where nino.sector_nino = 'ANITA'"
;
 
 
$RES_SECTOR=pg_query($conn$SELECT_SECTOR_NINO);


//visualizar como archivo

$NombreArchivo ="Listado De Ninos Por Sectores.xls";

//creo el libro para el archivo

$libro = new Spreadsheet_Excel_Writer();

// Estableceremos nuestro formato Negrita e Italica para usarlo en el documento
            
$negrita =& $libro->addFormat();
            
$negrita->setBold();
            
$negrita->setPattern(1);
$negrita->setFgColor(0);
            
            
                
            
$italica =& $libro->addFormat();
            
$italica->setItalic();
            
$italica->setColor('black');
            
$italica->setPattern(1);
            
$italica->setFgColor(0);
            
            
            
            
$formato =& $libro->addFormat();
            
$formato->setItalic();
            
$formato->setColor('black');
$formato->setPattern(1);
$formato->setFgColor(26);//amarillo claro

//$formato->SetMargins(0.75);
        
            // Creamos una hoja en la cual poner nuestros datos
            
$hoja =& $libro->addWorksheet();
            
//$hoja =& $libro->SetMargins(1);
                    
            // Ancho de columnas
            
$hoja->setColumn(0,0,10);
            
$hoja->setColumn(1,1,30);
            
$hoja->setColumn(1,2,30);
            
$hoja->setColumn(1,3,10);
            
$hoja->setColumn(1,4,30);
            
$hoja->setColumn(1,5,30);
            
$hoja->setColumn(1,6,30);
            
$hoja->setColumn(1,7,30);
            
$hoja->setColumn(1,8,30);
            
$hoja->setColumn(1,9,30);
            
$hoja->setColumn(1,10,30);
            
$hoja->setColumn(1,11,10);
            
$hoja->setColumn(1,12,30);
            
$hoja->setColumn(1,13,30);
            
$hoja->setColumn(1,14,10);
            
$hoja->setColumn(1,15,30);
            
            
            
// Verificamos que la hoja se haya generado correctamente
            
if (PEAR::isError($hoja)) 
                die(
$hoja->getMessage());
                
            
// Titulos
            
$hoja->writeString(02"LISTADO DE NINOS POR SECTOR"$negrita$formato);
                
              
// Encabezado de columnas
            
$hoja->write(20"C.I.P"$italica);
            
$hoja->write(21"NOMBRE"$italica);
            
$hoja->write(22"APELLIDOS"$italica);
            
$hoja->write(23"EDAD"$italica);
            
$hoja->write(24"DIRECCION"$italica);
            
$hoja->write(25"SECTOR"$italica);
            
$hoja->write(26"F. FIJO"$italica);
            
$hoja->write(27"F. MOVIL"$italica);
            
$hoja->write(28"F. REFERENCIA"$italica);
            
$hoja->write(29"ESCUELA/LICEO"$italica);
            
$hoja->write(210"CURSO"$italica);
            
$hoja->write(211"REPITENTE"$italica);
            
$hoja->write(212"MOTIVO REPITENCIA"$italica);
            
$hoja->write(213"ESTADO DE SALUD"$italica);
            
$hoja->write(214"DISCAPACITADO"$italica);
            
$hoja->write(215"TIPO DISCAPACIDAD"$italica);
            
            
            
$i 3;
            while (
$fila pg_fetch_assoc($RES_SECTOR)) {
                    
//$ts=$fila["ts"];
                    
$id_nin $fila['id_nino'];
                    
$nomb $fila['nombre_nino'];
                    
$ape_paterno_nino $fila['apellido_paterno_nino'];
                    
$ape_materno_nino $fila['apellido_materno_nino'];
                    
$edad_nino $fila['edad']. " ANOS";
                    
$direccion $fila['direccion_nino'];
                    
$sector $fila['sector_nino'];
                    
$f_fijo $fila['fono_fijo'];
                    
$f_movil $fila['fono_movil'];
                    
$f_referencia $fila['fono_referncia'];
                    
$escuela_liceo $fila['nombre_escuela_nino'];
                    
$curso $fila['curso_nino'];
                    
$repeticion $fila['repeticion_u_ano_nino'];
                    
$motiv_repitencia $fila['motivo_repitencia'];
                    
$estado_salu $fila['estado_salud'];
                    
$discapacidad $fila['discapacidad_nino'];
                    
$tip_discapacidad $fila['tipo_discapacidad_nino'];
                        
                
                
$hoja->write($i0$id_nin$formato);
                
$hoja->write($i1$nomb$formato);
                
$hoja->write($i2$ape_paterno_nino." ".$ape_materno_nino$formato);
                
$hoja->write($i3$edad_nino$formato);
                
$hoja->write($i4$direccion$formato);
                
$hoja->write($i5$sector$formato);
                
$hoja->write($i6$f_fijo$formato);
                
$hoja->write($i7$f_movil$formato);
                
$hoja->write($i8$f_referencia$formato);
                
$hoja->write($i9$escuela_liceo$formato);
                
$hoja->write($i10$curso$formato);
                
$hoja->write($i11$repeticion$formato);
                
$hoja->write($i12$motiv_repitencia$formato);
                
$hoja->write($i13$estado_salu$formato);
                
$hoja->write($i14$discapacidad$formato);
                
$hoja->write($i15$tip_discapacidad$formato);
                
                 
                                 
                
$i++;
            }
            
$libro->send($NombreArchivo);
            
$libro->close();
?>
tienes q tener instalado el PEAR antes de instalar el SpreadSheed..... espero te sirva bye....
  #6 (permalink)  
Antiguo 11/03/2009, 08:47
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Generar reportes en excel desde php + postgres

gracias ... ahi probare
  #7 (permalink)  
Antiguo 12/03/2009, 18:49
 
Fecha de Ingreso: diciembre-2007
Mensajes: 12
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Generar reportes en excel desde php + postgres

Se que el post un poco antiguo, pero tengo el mismo problema de lo de generar excel con php-posgre, usando el mismo codigo me da el siguiente error:

Warning: main(Spreadsheet/Excel/Writer.php): failed to open stream: No such file or directory in c:\appserv\www\lerys(siscom)2\php\ecxel_proveedore s.php on line 6

Fatal error: main(): Failed opening required 'Spreadsheet/Excel/Writer.php' (include_path='.;c:\php4\pear') in c:\appserv\www\lerys(siscom)2\php\ecxel_proveedore s.php on line 6


espero si alguien ve este post me pueda ayudar

Última edición por Alejandro777; 12/03/2009 a las 18:56
  #8 (permalink)  
Antiguo 13/03/2009, 09:40
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: Generar reportes en excel desde php + postgres

Un dia no hacen viejo al post, pero ese error que te manda ya es por parte de php, que al parecer no tiene permisos para escribir en la carpeta que quieres generar el archivo
  #9 (permalink)  
Antiguo 13/03/2009, 09:44
 
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 73
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Generar reportes en excel desde php + postgres

Bien lo unico que tienes que hacer es colocar el codigo siguiente en la cabecera de cualquier documento que puedas generar, claro que obviamente tendria que ser pura tablas,

Código PHP:
<?php
    header
("Pragma: ");
    
header('Cache-control: ');
    
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
    
header("Cache-Control: no-store, no-cache, must-revalidate");
    
header("Cache-Control: post-check=0, pre-check=0"false);
    
header("Content-type: application/vnd.ms-excel");
    
header("Content-disposition: attachment; filename=nombre_archivo.xls");
?>

// ya aca iria el codigo de lo que tu quieras, conexiones, y lo mas importante la tabla que quieras que aparezca en excel
  #10 (permalink)  
Antiguo 13/03/2009, 09:55
 
Fecha de Ingreso: febrero-2009
Mensajes: 47
Antigüedad: 15 años, 2 meses
Puntos: 2
De acuerdo Respuesta: Generar reportes en excel desde php + postgres

Oiie yo tengo este codigo me funciona la perfeciión... me cuentaas!
Código:
<?php
	include("../componentes/conexion.php");
	$conexion=conectar();
	
	$consulta2="select usuario.cedula, usuario.nombres, seccion.nombre_seccion, tipo_usuario.cargo, func_hor.fecha, func_hor.ent1, func_hor.sal1, func_hor.ent2, func_hor.sal2
	from usuario, tipo_usuario, func_hor, seccion
	where usuario.cedula=tipo_usuario.ced
	and tipo_usuario.cod_usuario=func_hor.cod_usuar
	and tipo_usuario.cod_seccion=func_hor.cod_seccion
	and func_hor.cod_seccion=seccion.cod_seccion
	and tipo_usuario.cod_seccion=seccion.cod_seccion order by fecha, cedula, nombres";
	
	$ejecutar2=pg_exec($conexion, $consulta2);
	$registro2=pg_num_rows($ejecutar2);
	
	if ($registro2==0) 
		echo '<script>alert("No hay registros");window.history.back();</script>';
	else
		{
header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=Horarios.xls");
header("Pragma: no-cache");
header("Expires: 0");
echo "<table border=1>\n";
echo "<tr>\n";
echo "<th>Cedula</th>\n";
echo "<th>Nombre</th>\n";
echo "<th>Seccion</th>\n";
echo "<th>Cargo</th>\n";
echo "<th>Fecha Horario</th>\n";
echo "<th>Entrada 1</th>\n";
echo "<th>Salida 1</th>\n";
echo "<th>Entrada 2</th>\n";
echo "<th>Salida 2</th>\n";
echo "</tr>\n";
$row=0;
do
    {
	    $myrow=pg_fetch_row($ejecutar2,$row);
		$row++;
		$n0=$myrow["0"];
		$n1=$myrow["1"];
$n2=$myrow["2"];
$n3=$myrow["3"];
$n4=$myrow["4"];
$n5=$myrow["5"];
$n6=$myrow["6"];
$n7=$myrow["7"];
$n8=$myrow["8"];

echo "<tr>\n";
echo "<td>".$n0."</td>\n";
echo "<td>".$n1."</td>\n";
echo "<td>".$n2."</td>\n";
echo "<td>".$n3."</td>\n";
echo "<td>".$n4."</td>\n";
echo "<td>".$n5."</td>\n";
echo "<td>".$n6."</td>\n";
echo "<td>".$n7."</td>\n";
echo "<td>".$n8."</td>\n";
echo "</tr>\n";
}//finDo
	while($row < $registro2);

echo "</table>\n";
}//fin else
if ($registro2<>0)
?>
  #11 (permalink)  
Antiguo 20/03/2009, 08:42
 
Fecha de Ingreso: febrero-2009
Mensajes: 5
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Generar reportes en excel desde php + postgres

Mira probe tu codigo me sale esos errores que son con el header no se que lo que es, son warning sigue corriendo y me genera bien la tabla, pq mostrandola en el php sale bien. pero n genera el archivo pro el warning.

Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp:1) in C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp on line 54

Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp:1) in C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp on line 55

Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp:1) in C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp on line 56

Warning: Cannot modify header information - headers already sent by (output started at C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp:1) in C:\Documents and Settings\Administrador\Escritorio\netserver_01beta 5-build3_bin\www\Sistema\administrador\report_mes2.p hp on line 57
  #12 (permalink)  
Antiguo 15/04/2009, 21:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 12
Antigüedad: 16 años, 3 meses
Puntos: 0
Mensaje Respuesta: Generar reportes en excel desde php + postgres

Sera q alguien me podria ayudar a resolver este error q me da este es el codigo de prueba q estoy usando


<?php
header("Pragma: ");
header('Cache-control: ');
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=nombre_archivo.xls");

include_once ("utilidad.php");
include_once ("sentencia_sql.php");

require_once 'Spreadsheet/Excel/Writer.php';
$conn = fun_conexion();

$SELECT_SECTOR_NINO = "SELECT * from control_inventario where nro_partes='".$busqueda2."'";

$RES_SECTOR=pg_query($conn, $SELECT_SECTOR_NINO);


//visualizar como archivo

$NombreArchivo ="Listado De Ninos Por Sectores.xls";

//creo el libro para el archivo

$libro = new Spreadsheet_Excel_Writer();

// Estableceremos nuestro formato Negrita e Italica para usarlo en el documento
$negrita =& $libro->addFormat();
$negrita->setBold();
$negrita->setPattern(1);
$negrita->setFgColor(0);



$italica =& $libro->addFormat();
$italica->setItalic();
$italica->setColor('black');
$italica->setPattern(1);
$italica->setFgColor(0);



$formato =& $libro->addFormat();
$formato->setItalic();
$formato->setColor('black');
$formato->setPattern(1);
$formato->setFgColor(26);//amarillo claro

//$formato->SetMargins(0.75);

// Creamos una hoja en la cual poner nuestros datos
$hoja =& $libro->addWorksheet();
//$hoja =& $libro->SetMargins(1);

// Ancho de columnas
$hoja->setColumn(0,0,10);
$hoja->setColumn(1,1,30);
$hoja->setColumn(1,2,30);



// Verificamos que la hoja se haya generado correctamente
if (PEAR::isError($hoja))
die($hoja->getMessage());

// Titulos
$hoja->writeString(0, 2, "LISTADO DE NINOS POR SECTOR", $negrita, $formato);

// Encabezado de columnas
$hoja->write(2, 0, "Nro Partes", $italica);
//$hoja->write(2, 1, "NOMBRE", $italica);
//$hoja->write(2, 2, "APELLIDO", $italica);



$i = 3;
while ($fila = pg_fetch_assoc($RES_SECTOR)) {
//$ts=$fila["ts"];
$id_nin = $fila['nro_partes'];
// $nomb = $fila['nombre'];
// $ape_paterno_nino = $fila['nif'];



$hoja->write($i, 0, $id_nin, $formato);
$hoja->write($i, 1, $nomb, $formato);

$hoja->write($i, 2, $ape_paterno_nino, $formato);



$i++;
}
$libro->send($NombreArchivo);
$libro->close();
?>


Este es el error q me da en el excel, cabe destacar q si me generar el Excel pero coneste error

</body>
</html><br />
<b>Warning</b>: main(Spreadsheet/Excel/Writer.php): failed to open stream: No such file or directory in <b>c:\appserv\www\siscom\php\ecxel_proveedores.php </b> on line <b>14</b><br />
<br />
<b>Fatal error</b>: main(): Failed opening required 'Spreadsheet/Excel/Writer.php' (include_path='.;c:\php4\pear') in <b>c:\appserv\www\siscom\php\ecxel_proveedores.php </b> on line <b>14</b><br />
  #13 (permalink)  
Antiguo 29/05/2009, 02:12
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Respuesta: Generar reportes en excel desde php + postgres

Hola,

una duda sobre crear excel de la manera que lo estáis haciendo, lo campos numéricos se os exportan como numéricos? o los coge como textos?

porque mas o menos tengo un código similar y siempre q exporto numero excel no me lo reconoce como tal y no puedo hacer sumatorios ni formulas con ellos...

si es así, como puedo solucionarlo?
saludos y gracias!!
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #14 (permalink)  
Antiguo 18/01/2012, 14:24
 
Fecha de Ingreso: enero-2012
Mensajes: 1
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Generar reportes en excel desde php + postgres

buenas estoy con un proyecto de pasar una base de datos en postgres a ecxel.. me estoy guiando del r0xdrig0.... pero el archivo include_once("./include_php/conexion.php") no se que contiene ya que no esta.. yo puse mi conexion por eso estoy en duda en el include_php... si me podrian ayudar.. yo me estoy iniciando con este tipo de programacion y quisiera ayuda gracias
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 22:43.