Php a excel

Soy novata en php y estoy desarrollando una aplicación que a la hora de mostrar un listado debe contar con un botón que permita exportar dicho listado a una hoja Excel.

2 respuestas

Respuesta
1
<%=Texto%>
Hola: (no se que paso, pero hice la respuesta y no quedo publicada... algo debe fallar en esta web.. Vamos nuevamente!)
Para hacerlo debes incluir al final del listado (o al principio, o donde quieras ;) ) un formulario:<form action="generaxls.php" method="post"> Puedes incluir en este formulario algunos campos ocultos, Ejemplo:
<input type="hidden" name="tipolistado" value="1">
y por último, incluye el boton de generar:
<input type="submit" name="verxls" value="Generar Xls">
Ahora, crea un "script" denominado generaxls.php y pega esto:
<?php
ob_start();
echo "<table><tr><th>Titulo<th>Otro Titulo Celda 2<th bgcolor=\"blue\">En Azul";
echo "<tr><td>Dato<td>Dato<td>Dato<td>Datooooo";
echo "<tr><td colspan=2>Dos Columnas";
echo "</table>";
$size=ob_get_length();
header("Pragma: no-cache");
header("Cache-control: private");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=archivo.xls");
header("Content-Type: application/vnd.ms-excel");
ob_end_flush();
?>
Y listo!.. Bueno.. ¿qué es esto?.. ob_start, ob_get_length y ob_end_flush hacen que tu tabla no "salga" hasta el final, esto lo hacemos para saber cuantos caracteres tiene de largo, y pasárselo al navegador con los headers. Y la única "magia" es la de decirle a través de las "headers" al navegador que lo que vas a entregar no es un a página común y corriente, sino que es un archivo del tipo Excel que se llama archivo.xls, que debe preguntar al operador por abrir o guardar (attachment).
Cualquier duda sigo a tu disposición..
Me he encontrado con un problema con lo de exportar a Excel. En los scripts que solo tienen una tabla me funciona a la perfección. El problema esta en el buscador. Te explico: eligiendo una opción de un combo principal en el que aparecen varias opciones de búsqueda(proyectos, cambios de alcande y alertas)
Según la que elijas se cargarán otros combos con criterios de selección específicos para esa opción (por ejemplo para proyectos podría buscar por cod y por fase) y aparece una caja de texto donde se introduce un parámetro (por ejemplo cod=1).
Por cada opción de búsqueda (proyectos, alertas, cambios de alcance) tengo una tabla distinta para visualizar los resultados de las consultas ya que las consultas para cada opción son distintas (campos y tablas distintas).
¿Cómo haría para poder incluir la opción de exportar a Excel para cada tabla estando todas en el mismo script?
Muchísimas gracias de verdad!
Hola, muchas gracias ya lo he conseguido y justo a tiempo para la revisión con mi jefe! ;). ¿Pero sería posible juntarlo todo en un único script?
La verdad es que tengo muchísimas dudas con la aplicación que estoy haciendo, es lo malo de ser inexperta. ¿Puedo seguir preguntándote?
Me gustaría saber como se hacen los menús desplegables o como hago para insertar una imagen en un botón, se que es un tipo de botón button y he conseguido insertar la imagen pero después el botón no hace nada.
Tengo un problema con una funcionalidad de la aplicación. Te explico: el tema es visualizo el resultado de una consulta, y por cada registro debe aparecer un checkbox. Esto no tiene problema, el tema es a la hora de comprobar cuales están checkeados ya que solo me visualiza el ultimo que se ha checkedo, ya que poner el checkbox en un while todos tienen el mismo name. Probé a concatenarle al name el identificador del registro para que fuesen todos distintos pero en eso caso no me visualiza ninguno de los values de los checks seleccionados.:(
while ($row4 = oci_fetch_array($result4,OCI_BOTH)){
ECHO"<TR>";
$idf=$row4[COD_PROYECTO];
echo"<td><input type='checkbox' name='".$idf."' value='".$idf."'>
<td><a href=\"visualizacion.php?id=$row4[COD_PROYECTO]\">$row4[COD_PROYECTO]</a></td>
<td>$row4[FECHA_REG_JP]</td>
<td>$row4[FASE]</td>
<td>$row4[ESTADO]</td>";
Otra cosa:
Quisiera que un botón tuviera un enlace, es decir, ¿al pulsar sobre el que me redireccionase a otro script pero resulta que utilizando <a hre...><input type=submit.......></a> no me funciona en el Explorer como puedo hacerlo?
Y por el ultimo, debo incluir en mi aplicación la funcionalidad de guardar documentos, ¿cómo hago?
Es que tengo que cumplir unos plazos bastante justos y como ya te he comentado soy novata y no me da el tiempo para andar leyendo manuales y probando. Es mi primer trabajo! Y no quisiera perderlo!
Muchísimas gracias por tu atención, la verdad es que tengo muchísimas dudas pero no quisiera abusar y si en algún momento lo hago házmelo saber
Primero:
¿Viste qué largo el script?.. Me parece que te convendría partirlo un poco... porque sino cualquier modificación, como por ejemplo esta que vamos a hacer puede ser muy dramática. No dejes que tus script se hagan tan largos.. pegale una mirada a "require" e "include" en el manual.
Vamos ahora a modificar un poco el script que me pasaste:
Lo primero es agregar el / los botones para exportar donde corresponde...
(Yo supongo que el script que me enviaste se llama buscador1.php, sino AVISAME, y enviame el buscador1.php)..
Lo que vamos a hacer es lo siguiente: Agregaremos un botón de "En Excel" a las consultas, de tal manera de que tengan el botón "Consultar" y el botón "En Xls".
La idea es que cuando hagan click en "EN XLS" les permita abrir/guardar el archivo excel.
Entonces.. en las 3 líneas donde esta el botón consultar:
<INPUT TYPE=submit NAME=OK VALUE='Consultar'> agregale:
<input type=submit name=enxls value='Consultar'>
de esta manera, ahora tenemos consultar y consultar en xls..
Ahora.. lo primero que tenemos que hacer es "verificar" al comienzo del script si se trata de un XLS...
veamos:
Al comienzo, antes del "$conexion=oci_" pones:
if(isset($_POST['enxls'])) {
ob_start();
$OK='Consultar';
}
De esta manera "frenamos las salidas" y hacemos de cuenta que estamos en consulta (Supongo que querrás en XLS las mismas tablas que ves en pantalla).
Ahora.. abajo de esto:
} //FIN ISSET COMBO
}//fin boton ok
if ($OK == "Consultar") {
Pones esto:
if(isset($_POST['enxls'])) {
ob_end_clean ( );
ob_start();
}
De esta manera.. eliminamos de nuestro archivo xls el "select " de Proyectos, Peticiones y Reuniones, y nos preparamos para exportar a excel.
por ultimo.. despues de:
}//fin isset
tenes que agregar:
if(isset($_POST['enxls'])) {
$size=ob_get_length();
header("Pragma: no-cache");
header("Cache-control: private");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=archivo.xls");
header("Content-Type: application/vnd.ms-excel");
ob_end_flush();
}
Voala! Teoricamente deberia funcionar.. SEGURO QUE NO FUNCIONA ;)
Pero me avisas..
Una cosa.. Si quieres que te abra DIRECTAMENTE un excel en tu navegador, en donde dice
Content-type:attachment
Podes poner content-type:inline
Saludos.
P.D. Esto es una RECETA DE COCINA que no te ayuda mucho a aprender. Para que realmente lo aproveches, tendrías que pegarle una mirada (en google o en los manuales) a:
Exportar en XLS, Headers, y "Output Control Functions" o en castilla: "Control de Salida"
Vamos por partes... La finalidad de este sitio es también ayudar a otros, o por lo menos intentar evitar que todos respondamos el mismo tipo de preguntas, entonces.. para organizarnos, trata de hacer una pregunta por cada tema.. ¿si?... Yo voy a tratar de contestarte y "cerrar" php a excel, y después haces otra pregunta con los otros temas.. ¿te parece?.. Vamos...
1) Juntar todo en un único script haría que el script fuera muy largo, y se te complicaría luego al momento de hacer modificaciones o reformas, se podría hacer colocando todo en un único script con un "if" al comienzo, entonces el sistema "saltaría" la parte de exportar, si quieres, lo haces con una segunda pregunta "incluir 2 scripts en uno", y yo te ayudo.
2) Menúes desplegables, te recomiendo google: "javascript menúes desplegables", o acá mismo (todoexpertos) hay un montoooon... lo mismo para el botón, y para los checkboxes.. si necesitas podes preguntar nuevamente en otra pregunta.
3) Volvemos a php a excel..
Tené en cuenta lo siguiente: Cuando haces click en el botón "Generar XLS", el NAVEGADOR de internet llama al script "generaxls.php" y le "pasa" la variable "tipolistado" con el valor 1, es decir, que en tu script "generaxls" tendrás una variable $tipolistado con valor 1, la idea es que esa variable cambie de acuerdo al listado que necesitas y a los parámetros, para que puedas hacer la consulta. Para eso, tendría que conocer un poco más tu script de consultas...
Entonces, te pido que me des un poco de letra.. por ejemplo, una parte del resultado (Ver código fuente del navegador) donde este la declaración <form y los combos, como para tener una idea de que variables estas pasando y lo vemos con mas claridad.. La Seguimos.
Respuesta
1
Siento la tardanza... tengo emails de avisos de cada pregunta pero no he visto el mensaje hasta hoy.
En realidad cualquier "exportacion" que hagas a otro formato, debes hacerla en el propio servidor. Es decir, deberás generar un XLS en el servidor, lo que significa que tu servidor debe entender lo que es un objeto XLS, y saber generarlo y procesar tus instrucciones. Esto te lo digo simplemente para que entiendas la teoría...
Con PHP puedes generar ficheros PDF también, con un componente que si no me equivoco ya viene instalado con PHP o al menos en la mayoría de hostings.
Si te digo la verdad nunca he generado un XLS desde PHP, pero si lo hice con Visual Basic... y te digo que básicamente había que crear el objeto "libro" (spreadsheet) luego crear un objeto "hoja" dentro (sheet) y luego ir escribiendo los contenidos de las celdas (cells). No era difícil, pero tenia su cosa...
Buscando en Google he encontrado esto:
http://jaxn.org/blog/archive/290-Using-PHP-to-Create-Excel-Spreadsheets.html
Utilizan algún fichero PHP a incluir, el modulo PEAR, que no se exactamente de donde sale... pero si lees el contenido de ese ejemplo PHP ves como va más o menos el tema.
También tienes este otro:
http://www.web-aware.com/biff/
Más no te puedo ayudar porque no he tenido experiencia con el tema... pero espero al menos haberte dado algo de luz.
Si tienes alguna duda concreta sobre algo aquí estaré.. y esta vez intentare no tardar 10 días je je.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas