Autor Tema: Exportar datos de consulta mysql a pdf/excel/word desde PHP  (Leído 21475 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Chewii

  • Novato
  • *
  • Mensajes: 13
  • Puntuación: 0
    • Ver Perfil
Exportar datos de consulta mysql a pdf/excel/word desde PHP
« : 14 de junio de 2012, 04:00:14 pm »
Estoy generando reportes en mi aplicacion, y necesito mostrar los resultados en informes, ya sea en pdf, excel o word (si puedo exportarlos de las 3 maneras mucho mejor), tengo los resultados con sus consultas en php y los muestro en tablas html en una pagina normal, desde ahi quisiera presionar un boton y que me los exporte a cualquiera de las 3 aplicaciones; tengo un boton para imprimir datos desde la misma pagina del reporte, y funciona sin problemas.  He probado la herramienta "dompdf", pero solo llegue a colocar el titulo del reporte y la cabecera de la tabla, del resto no e podido hacer mas nada, y tambien probe la herramienta "fpdf" y, a pesar de que obtuve los resultados que queria, me faltaron un par de variables que no consigo como guardar.  El detalle es que no encuentro como mostrar o exportar los resultados que quiero de la forma que quiero, asi que preferi mejorar el diseño de las tablas y mostrar los datos en una pagina web normal, comun y corriente. lo estoy haciendo de esta forma:

El codigo de busqueda:

Código: [Seleccionar]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>..::||| BUSQUEDA DE CRUCEROS |||::..</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../css/style.css">

</head>

<body>
<table width="455" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#000000" class="input">
  <tr>
    <td align=center bgcolor="#ffffff"><img src="../../../images/palangreh.png" width="466" height="62"></td>
  </tr>
</table>
<p>&nbsp;</p>
<p align="center" class="title03">CAPTURA TOTAL POR CRUCERO/TIPO</p>
<form method="GET" name="frm_barco" action="caps_crno.php" target="_blank">
  <div align="center">
    <p>&nbsp;</p>
    <p>CRUCERO:
      <input name="cod" type="text" class="input" id="cod"  size="10" maxlength="5" title="Codigo del crucero a ingresar">
    TIPO CAPTURA:
    <input name="cod2" type="text" class="input" id="cod2"  size="5" maxlength="1" title="Codigo del crucero a ingresar">
    </p>
    <p>
      <input name="Submit" type="submit" class="FBoton" value="Enviar">
</p>
    <p>&nbsp;    </p>
  </div>
</form>
<p>&nbsp;</p>
</body>
</html>

Archivo de consultas e impresion de datos en html:

Código: [Seleccionar]
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../css/style.css">
<?php  
require_once(&#39;../librerias/config.php&#39;);
$error = &#39;<a href="javascript: window.history.back()"><< Volver >></a>&#39;;// Mensaje de error y nos devuelve atras
if(isset($_GET[&#39;cod&#39;])){ //SI SE HA METIDO EL CODIGO DEL BARCO

//Realizar la conexion al servidor (sustituyes la info con los datos de tu servidor)
$code $_GET[&#39;cod&#39;]; //PARA USAR GET, USA EL FORM QUE TE DEJO
$codi $_GET[&#39;cod2&#39;];

//Se procede con la consulta
$query = &#39;SELECT nlance,ci,nind,nkg FROM caplpal WHERE crno = \&#39;&#39;.$code.&#39;\&#39; && cond = \&#39;&#39;.$codi.&#39;\&#39; order by nlance asc&#39;; 
$que mysql_query($query);

//Comprobar si se ha realizado la consulta
if (!$query) {
die(&#39;Error: &#39;.mysql_error());
}
//Mensaje de error en caso de que el codigo no exista
if (!mysql_num_rows($que)) {
echo &#39;Error en el codigo ingresado, intenta de nuevo&#39;.  $error . &#39;&#39;;
exit;
}
}
?>

<?php echo &#39;<p align="center"><b>CAPTURA TOTAL POR CRUCERO/TIPO </b></p>&#39;; ?>
<?php echo &#39;<p align="center"><b>CRUCERO: &#39;. $code . &#39;</b>&#39;,&#39; &#39;, &#39;<b>TIPO CAPTURA: &#39;. $codi . &#39;</b></p>&#39;; ?>
<table width=500 align=center >
<tr bgcolor="0479ff" align=center>
    <td><b class="heads_tbl">LANCE</b></td>
    <td><b class="heads_tbl">ESPECIE</b></td>
    <td><b class="heads_tbl">N&deg; INDIVIDUOS</b></td>
    <td><b class="heads_tbl">N&deg; KILOGRAMOS</b></td>
</tr>
<?
//creo e inicializo la variable para contar el número de filas
$num_fila = 0;

//bucle para mostrar los resultados
while ($damefila=mysql_fetch_object($que)){
    echo "<tr ";
    if ($num_fila%2==0)
      echo "bgcolor=#dfecfc"; //si el resto de la división es 0 pongo un color
    else
      echo "bgcolor=#92c2fc"; //si el resto de la división NO es 0 pongo otro color
    echo ">";
?>
      <td align="center" class="data"><? echo $damefila->nlance;?></td>
         <td align="center" class="data"><? echo $damefila->ci;?></td>
      <td align="center" class="data"><? echo $damefila->nind;?></td>
      <td align="center" class="data"><? echo $damefila->nkg;?></td>
      </tr>
<?
    //aumentamos en uno el número de filas
    $num_fila++;
} //cierro el while
?>
</table>
<p align="center">
      <input type="button" name="pdf" id="pdf"  value="Enviar a PDF"/>
      <input type="button" name="xls" id="pdf"  value="Enviar a MS Excel"/>
      <input type="button" name="doc" id="pdf"  value="Enviar a MS Word"/>
  <input type="button" name="button" id="button" value="Imprimir" onclick="window.print();"/>
</p>

Esta es la manera que uso para crear los reportes y, como les dije, quisiera que al hacer click en cualquiera de los botones me exporte el reporte a la respectiva aplicacion, ya sea word, excel o formato pdf. Espero su ayuda muchachos..

Desconectado msn2wolf

  • Novato
  • *
  • Mensajes: 15
  • Puntuación: 0
    • Ver Perfil
Re:Exportar datos de consulta mysql a pdf/excel/word desde PHP
« Respuesta #1 : 19 de julio de 2012, 03:10:23 pm »
Definitivamente no hay una forma completamente "generica" de exportar a los 3 formatos ya que cada formato tiene sus propias virtudes y limitaciones. El "truco" esta que lo que deseas no es tanto crear el formato correcto sino que el programa deseado "abra" el archivo y se vea bien. Al final eso es lo que desea el usuario. Ahora bien si tu tabla es simple ( sin colores, ni imagenes ni cosas raras, sino una tabla sencilla) eso te ayuda a que se abra tu abanico de posibilidades. Las soluciones mas complejas lo que añaden es simplemente soporte para estas funcionalidades avanzadas que probablemente no necesites.

Te enumero algunos consejos de mi experiencia prática:
  • Como bien dijiste en el caso de PDF yo he utilizado FPDF y DOMPDF con buenos resultados en ambos casos.
  • Para Excel tienes 3 opciones: 
     
    • Usando tablas HTML y cambiando el Content-Type para que Excel lo abra. Excel soporta archivos con tablas HTML. Puedes ver el ejemplo aqui: http://webintenta.com/exportar-tablas-html-a-excel-con-php-y-jquery.html
    • Usando XSLT y XML para generar archivos XLSX (nuevo formato de Excel). Excel 2003 en adelante cambio su formato binario en un formato OpenXML, este lo puedes generar facilmente en PHP.
    • Crear archivos binarios XLS, el formato viejo de Excel es el mas difundido pero tambien el mas complicado y obsoleto. Para crear archivos en este formato (BIFF)  necesitaras de clases especiales. Revisa: http://phpexcel.codeplex.com/
  • Word tambien soporta HTML, tienes como opción crear tablas HTML y cambiar el Content-Type o buscar una solución similar a las enumeradas para Excel (DOCX, WRI, etc)

 En resumen para tanto Word como Excel puedes utilizar formatos HTML simples y solo el caso de PDF sería el mas complicado. En PDF te recomiendo usar DOMPDF con el setup correcto, con esto podrías solucionar tu problema con basicamente la misma base de código para el reporte.
  Esto ultimo representa una ventaja importante porque una vez creada la solución, los formatos de exportación no cambiarán pero la estructura del reporte si. De hacerlo con soluciones distintas para cada caso, se harían los cambios mas complejos porque tendrías que re-programarlos para cada uno de los casos.

Salu2