Foros del Web » Programando para Internet » PHP »

Generar reportes en excel

Estas en el tema de Generar reportes en excel en el foro de PHP en Foros del Web. Hola amigos, soy nuevo por aca aunque he leido varios post, estoy aprendiendo a programar en php aunque mi nivel de conocimientos es novato. Bueno ...
  #1 (permalink)  
Antiguo 08/08/2012, 19:34
Avatar de edgarhpi  
Fecha de Ingreso: agosto-2012
Ubicación: Barquisimeto, Venezuela
Mensajes: 3
Antigüedad: 11 años, 8 meses
Puntos: 0
Pregunta Generar reportes en excel

Hola amigos, soy nuevo por aca aunque he leido varios post, estoy aprendiendo a programar en php aunque mi nivel de conocimientos es novato.

Bueno mi pregunta es la siguiente, tengo un formulario de consulta a ciertos datos dentro de mi BD, claro de acuerdo a ciertos parametros (filtro), hago la consulta y me muestra en una tabla con los registros solicitados, pero quiero que en dicha tabla con los resultados, tenga una opcion de exportar a excel. Alguien podria ayudarme al respecto? gracias.
  #2 (permalink)  
Antiguo 08/08/2012, 20:07
Avatar de KsrZ  
Fecha de Ingreso: abril-2011
Ubicación: /home/KsrZ/Desktop
Mensajes: 156
Antigüedad: 13 años
Puntos: 26
Respuesta: Generar reportes en excel

no se si existe algún script que sea capaz de pasarlo de formato html a exel quizá..
pero porque exel? si podrías mostrar una tabla con celdas y filas al igual que exel.. y en html
__________________
for (var i = 0; i < 2; i++){
i = !confirm("Trata a tu código como a ti mismo.. este te esta representando.. no te dejes mal parado")? 0 : i;
}
  #3 (permalink)  
Antiguo 08/08/2012, 21:14
 
Fecha de Ingreso: agosto-2012
Ubicación: Santiago
Mensajes: 124
Antigüedad: 11 años, 8 meses
Puntos: 60
Respuesta: Generar reportes en excel

PHPExcel de CodePlex es bueno. Lo he probado y funciona de maravillas
__________________
~~Aprendiendo.
Become a Programmer, Moth*rf*cker
  #4 (permalink)  
Antiguo 09/08/2012, 04:03
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Generar reportes en excel

¿No te serviría en .csv? Excel los abre por defecto y se muestran en formato de tabla.

Yo lo exporto con este código que cogí de algún sitio y modifiqué un poco.
Código PHP:
 //Fichero exportar csv
//Generamos el fichero CSV
//requiere que le pasen el nombre del fichero
//ej. $csv_file="reporte.csv"
//Y opcional el directorio
//$directorio ="/csv/";
//El fichero se genera tanto para subir por FTP como para exportar a fichero CSV
$nombreBD "nombre de tu bd";
$consulta sprintf"SELECT * FROM tabla" );
if (!isset(
$directorio)) {$directorio="";}
$ruta $directorio.$csv_file;
include(
"conexion.php"); //AQUÍ yo incluí mi conexion a la base de datos
$csv_end "
    "
;  
$csv_sep ";";  //separador entre datos    
$csv=""
//Si es un archivo hay que hacer un echo para que lo guarde sino lo metemos en la variable
if (isset($enArchivo)) {echo 'codigo'.$csv_sep.'nombre'.$csv_sep.'refprov'.$csv_sep.'pvp6'.$csv_sep.'exisTotal'.$csv_sep.'codigo2'.$csv_end;}
else { 
$csv 'codigo'.$csv_sep.'nombre'.$csv_sep.'refprov'.$csv_sep.'pvp6'.$csv_sep.'exisTotal'.$csv_sep.'codigo2'.$csv_end; }
while(
$row=mysql_fetch_array($resultado))  
{  
    if (isset(
$enArchivo)) {echo $row['codigo'].$csv_sep.$row['nombre'].$csv_sep.$row['refprov'].$csv_sep.$row['pvp6'].$csv_sep.$row['exisTotal'].$csv_sep.$row['codigo2'].$csv_end; } 
    else {
        
$csv.=$row['codigo'].$csv_sep.$row['nombre'].$csv_sep.$row['refprov'].$csv_sep.$row['pvp6'].$csv_sep.$row['exisTotal'].$csv_sep.$row['codigo2'].$csv_end;  
    }        
}  
if (!isset(
$enArchivo)) //Si es en fichero no guardamos copia
{        
    
//Generamos el csv de todos los datos  
    
if (!$handle fopen($ruta"w")) {  
        echo 
"No se tiene permiso para abrir el fichero"
        
$log = new entrada_log("ERROR. No se tiene permiso para abrir el fichero $ruta.");
        exit;  
    }  
    if (
fwrite($handleutf8_decode($csv)) === FALSE) {  
        
$log = new entrada_log("Error, no se tiene permiso para escribir en el fichero $ruta.");
        echo 
"No se tiene permiso para escribir en el fichero";  
        exit;  
    }  
    
$log = new entrada_log("El fichero CSV se ha generado correctamente.");
    
fclose($handle);  

Tendrás que modificar muchas cosas para que te funcione. Ojo a los campos que quieres exportar también que los tienes que poner a mano.

Ahora el fichero que llama al include anterior para generar el fichero:
Código PHP:
 //fichero include_generaCSV
include ("./includes/clases.php");
$csv_file date('Y-m-d__H.i')."__nombreFichero.csv";
$enArchivo TRUE//para diferenciar que el que lo tiene que subir en FTP del que genera el fichero
 // Añadimos las cabeceras para decirle que tiene que devolver un fichero con nombre.csv
 
header"Content-Type: text/csv" );
 
header"Content-Disposition: attachment;filename=$csv_file" );
 include 
"include_generaCSV.php"
Cuando lo llamo desde subir.ftp pues en lugar de devolverme el archivo se sube directamente al ftp.

Luego el formulario que lleva a generaCSV:
Código PHP:
 //fichero con el boton para generar el .csv
<strong>Exportar en CSV</strong>
<
form method="post" action="exportarCSV.php" name="exportar">                       
<
input type="submit" name="subir" value="Exportar"/>
</
form
Aquí te dejo también la clase que incluí para generar el log. Lo hice para probar de crear clases que no tenía ni idea. No se si está bien o mal pero funciona :
Código PHP:
 //clases.php (va con un include en todos)
class entrada_log {
    var 
$fichero;
    var 
$fecha;
    function 
__construct($texto) { //Constructor de la clase
        
$this->fichero  fopen("log.log","a"); //a es modo lectura y coloca el puntero al final
        
$this->fecha date("d-m-Y H:i:s \t");
        
fwrite($this->fichero$this->fecha $texto PHP_EOL);   
        
fclose($this->fichero);
    }
}
// Para escribir un registro simplemente ponemos
// $log = new entrada_log("Mensaje a añadir al log"); 
Creo que no se me olvida nada, espero que te sirva.
  #5 (permalink)  
Antiguo 09/08/2012, 04:07
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Generar reportes en excel

¿No te serviría en .csv? Excel los abre por defecto y se muestran en formato de tabla.

Yo lo exporto con este código que cogí de algún sitio y modifiqué un poco.
Código PHP:
 //Fichero exportar csv
//Generamos el fichero CSV
//requiere que le pasen el nombre del fichero
//ej. $csv_file="reporte.csv"
//Y opcional el directorio
//$directorio ="/csv/";
//El fichero se genera tanto para subir por FTP como para exportar a fichero CSV
$nombreBD "nombre de tu bd";
$consulta sprintf"SELECT * FROM tabla" );
if (!isset(
$directorio)) {$directorio="";}
$ruta $directorio.$csv_file;
include(
"conexion.php"); //AQUÍ yo incluí mi conexion a la base de datos
$csv_end "
    "
;  
$csv_sep ";";  //separador entre datos    
$csv=""
//Si es un archivo hay que hacer un echo para que lo guarde sino lo metemos en la variable
if (isset($enArchivo)) {echo 'codigo'.$csv_sep.'nombre'.$csv_sep.'refprov'.$csv_sep.'pvp6'.$csv_sep.'exisTotal'.$csv_sep.'codigo2'.$csv_end;}
else { 
$csv 'codigo'.$csv_sep.'nombre'.$csv_sep.'refprov'.$csv_sep.'pvp6'.$csv_sep.'exisTotal'.$csv_sep.'codigo2'.$csv_end; }
while(
$row=mysql_fetch_array($resultado))  
{  
    if (isset(
$enArchivo)) {echo $row['codigo'].$csv_sep.$row['nombre'].$csv_sep.$row['refprov'].$csv_sep.$row['pvp6'].$csv_sep.$row['exisTotal'].$csv_sep.$row['codigo2'].$csv_end; } 
    else {
        
$csv.=$row['codigo'].$csv_sep.$row['nombre'].$csv_sep.$row['refprov'].$csv_sep.$row['pvp6'].$csv_sep.$row['exisTotal'].$csv_sep.$row['codigo2'].$csv_end;  
    }        
}  
if (!isset(
$enArchivo)) //Si es en fichero no guardamos copia
{        
    
//Generamos el csv de todos los datos  
    
if (!$handle fopen($ruta"w")) {  
        echo 
"No se tiene permiso para abrir el fichero"
        
$log = new entrada_log("ERROR. No se tiene permiso para abrir el fichero $ruta.");
        exit;  
    }  
    if (
fwrite($handleutf8_decode($csv)) === FALSE) {  
        
$log = new entrada_log("Error, no se tiene permiso para escribir en el fichero $ruta.");
        echo 
"No se tiene permiso para escribir en el fichero";  
        exit;  
    }  
    
$log = new entrada_log("El fichero CSV se ha generado correctamente.");
    
fclose($handle);  

Tendrás que modificar muchas cosas para que te funcione. Ojo a los campos que quieres exportar también que los tienes que poner a mano.

Ahora el fichero que llama al include anterior para generar el fichero:
Código PHP:
 //fichero include_generaCSV
include ("./includes/clases.php");
$csv_file date('Y-m-d__H.i')."__nombreFichero.csv";
$enArchivo TRUE//para diferenciar que el que lo tiene que subir en FTP del que genera el fichero
 // Añadimos las cabeceras para decirle que tiene que devolver un fichero con nombre.csv
 
header"Content-Type: text/csv" );
 
header"Content-Disposition: attachment;filename=$csv_file" );
 include 
"include_generaCSV.php"
Cuando lo llamo desde subir.ftp pues en lugar de devolverme el archivo se sube directamente al ftp.

Luego el formulario que lleva a generaCSV:
Código PHP:
 //fichero con el boton para generar el .csv
<strong>Exportar en CSV</strong>
<
form method="post" action="exportarCSV.php" name="exportar">                       
<
input type="submit" name="subir" value="Exportar"/>
</
form
Aquí te dejo también la clase que incluí para generar el log. Lo hice para probar de crear clases que no tenía ni idea. No se si está bien o mal pero funciona :
Código PHP:
 //clases.php (va con un include en todos)
class entrada_log {
    var 
$fichero;
    var 
$fecha;
    function 
__construct($texto) { //Constructor de la clase
        
$this->fichero  fopen("log.log","a"); //a es modo lectura y coloca el puntero al final
        
$this->fecha date("d-m-Y H:i:s \t");
        
fwrite($this->fichero$this->fecha $texto PHP_EOL);   
        
fclose($this->fichero);
    }
}
// Para escribir un registro simplemente ponemos
// $log = new entrada_log("Mensaje a añadir al log"); 
Aquí te dejo también mi conexion.php que va también en include CADA vez que quiero hacer algo de la BD:
Código PHP:
$servidor 'localhost';
$usuario 'usuario';
$clave 'pass';
$conn mysql_connect($servidor$usuario$clave) or die( mysql_error("No se pudo conectar"));
    
mysql_select_db$nombreBD$conn ) or die( mysql_error$conn ) );
    
$resultado mysql_query$consulta$conn ) or die( mysql_error$conn ));
    if (isset(
$cerrarConexion))
    {
        
mysql_close();
        
$unset ($cerrarConexion); 
    } 
Para usarlo:
Código PHP:
$nombreBD "nombre de tu bd";
$consulta "SELECT * FROM tabla";
//Y te queda el resultado de la consulta en la variable $resultado para hacer lo que quieras con ella 

Creo que no se me olvida nada, espero que te sirva.


NOTA: Parece que le di a quotear en lugar de editar. Borrad el anterior post si puede ser!
  #6 (permalink)  
Antiguo 09/08/2012, 09:08
Avatar de edgarhpi  
Fecha de Ingreso: agosto-2012
Ubicación: Barquisimeto, Venezuela
Mensajes: 3
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Generar reportes en excel

Código PHP:
$fecha=date('d_m_Y');
    
header("Content-type: aplication/vnd.ms-excel");
    
header("Content-Disposition: attachment; filename=reporte_$fecha.xls");
    
header("Pragma: no-cache");
    
header("Expires: 0"); 
tengo este codigo lo consegui en otros post, dice que hay que colocarlo al principio de la pagina, pero cuando le doy buscar a mi formulario, lo primero que hace generar el archivo excel, pero lo que quiero es que primero muestre el resultado de la busqueda en una tabla html, y luego tenga la opcion de exportar a excel mediante un boton.

Etiquetas: excel, formulario, registro, reportes, tabla
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 02:37.