epelpad

Crear documentos excel con PHP

Hola gente, espero y esten bien, perdon por tanta demora es que andamos planeando un sitio para el año que entra y estamos haciendo los preparativos,

El tema de hoy ser crear documentos Excel con PHP

Crear documentos excel con PHP


Yo siempre opto por realizar reportes con PDF pero por que no tener la opcion de crearlos tambien en un documento de excel, hay muchas maneras de hacerlo pero esta vez nos meteremos con PHPExcel

Lo primero a realizar sera descargar las librerias las cuales se pueden encontrar en la pagina de

http://phpexcel.codeplex.com/

Cuando descarguemos el archivo y saquemos los archivos del rar el contenido sera el siguiente

Programacion


En lo personal cuando utilizo este tipo de librerias en mis proyectos me gusta solo agarrar las clases y meterlas en una carpeta conel nombre de lib para tener un mejor orden en nuestros proyectos. Despues creo un archivo en php con el nombre de index, al final quedaria asi

PHP

Ahora vamos a lo chingon, programar =)
Meteremos un poco de programacion orientada a objetos ya que la libreria las requiere para su funcionamiento =)

Lo primero que haremos sera incluir las librerias en nuestro archivo, yo utilice la funcion include_once()

Haremos algo basico, despues algo que mucha gente se preguntara como hacerlo =)
Si queremos que nuestro archivo de excel tenga información sobre creador, su titulo entre otras cosas lo mandaremos llamar con el getProperties() a compañado de la informacion que queramos añadir

El codigo de un archivo excel estilo hola mundo seria el siguiente

<?php
include_once("lib/PHPExcel.php";

$prueba = new PHPExcel();
$prueba->setActiveSheetIndex(0)->setCellValue("A1","PRUEBA";

$prueba->getActiveSheet()->setTitle("Hoja de prueba";

$objWriter = PHPExcel_IOFactory::createWriter($prueba, 'Excel2007');
$objWriter->save('prueba.xlsx');

?>

A continuacion explicare el codigo acompañado de una imagen con el resultado
Como dije lo primero por hacer sera incluir las librerias, lo siguiente crear la clase, la funcion setActiveSheetIndex sirve para indicarnos en que hoja vamos a trabajar... despues de eso con la funcion setCellValue indicamos la celda en la que nos posicionaremos y el contenido que agregaremos en ella... en esta caso seria la celda A1 y su contenido sera la palabra PRUEBA

Lo siguiente por hacer es utilizar la funcion getActiveSheet la cual nos devolvera el valor de la hoja que estamos utilizando y cambiaremos el nombre de la hoja con la funcion setTitle como se muestra, despues de eso mandaremos llamar el IO(input output) de la libreria para que trabaje con el codigo y saque el archivo en excel... para finalizar mandaremos llamar el metodo save de la clse $objWriter para guardar el documento con el nombre que nosotros queramos

NOTA
Cuando utilicemos la funcion setActiveSheetIndex las cosas como cambiar titulo seran ejecutados en esa hoja ya que se convertira en la hoja activa..

No importa el orden del codigo, si se quiere que la hoja 1 sea la activa y luego la 0 no importa la ubicacion del codigo siempre y cuando los setCellValue sean llamados de la hoja que los requiera....

El resultado es el siguiente

clases

y nuestro excel mostrara

Base de Datos


Ahora veremos algo que muchos pediran.... meter registros de nuestra base de datos en nuestro excel
Seguiremos el codigo anterior y le añadiremos algunas cositas de tal manera que nuestro codigo se quede asi

$contador = 0;
$conexion = mysql_connect("localhost","host", "";
if(!$conexion){ echo "Error al conectar a la base de datos"; }
if(!mysql_select_db("prueba",$conexion))
{ echo "Error al seleccionar la tabla"; }

$res = mysql_query("consulta", $conexion);
while($fila == mysql_fetch_array($res))
{
$contador++;
$prueba->setActiveSheetIndex(0)->setCellValue("A" . $contador, $fila["valor"]); <---- con esto podrias llenar toda la fila A1 al momento de que entre otro registro se
cambiaria a A2 y asi =)
}



El contador sera de vital importancia ya que sera el encargado de hacer que el siguiente registro se pase a la siguiente columna o fila (nunca supe cual era una u otra XD), aclaro que esp osible hacer esto con el objeto de conexion antes creado =), entonces lo que hacemos es indicar la hoja activa y colocar el valor pero si lo notas en el setCellValue viene esto ("A" . $contador,$fila["valor"]); esto dice que el primer registro se colocara en A1 con el valor que tenga, el segundo registro se colocara en A2 con su valor y asi sucesivamente

Bueno eso es todo, ya concluimos con php, lo siguiente sera un poco de javascript o css y tratar de ver alguna recomendaciones sobre como programar

NOTA
me gustaria poner los codigos fuentes pero nuestra gente de twitter, facebook y g+ no podrian verlo sin tener cuenta de taringa lo que daria entender que estamos limitandonos a solo taringa, espero su comprension =)


Espero y les guste
Dudas o preguntas
Buscanos en facebook como
https://www.facebook.com/Hardcoding00
en twitter
http://www.twitter.com/#!/HardCoding00
en g+
https://plus.google.com/u/0/b/108067998243519518525/108067998243519518525/posts

Saludos y animo gente !!!

8 comentarios - Crear documentos excel con PHP

skof03 +1
genial funciona pero tengo una duda como podria escribir en un archivo excel pero sin que se borren campos ya establecido unicamente se modifiquen los que yo sobreescriba

gracias
Edson_Castillo
Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file prueba.xlsx.' in /Applications/XAMPP/xamppfiles/htdocs/numeros/lib/PHPExcel/Writer/Excel2007.php:399 Stack trace: #0 /Applications/XAMPP/xamppfiles/htdocs/numeros/exce.php(10): PHPExcel_Writer_Excel2007->save('prueba.xlsx') #1 {main} thrown in /Applications/XAMPP/xamppfiles/htdocs/numeros/lib/PHPExcel/Writer/Excel2007.php on line 399


Alguien sabe por que me pasa ese error ?
frots
Que tienes en la linea 339, yo no he usado esa lib pero talvez sea sencillo el error
Juanchobar
Si quisiera abrir el excel generado y no guardarlo que debo hacer?
djdoguez
Hola, muy bueno el aporte, me funciona todo perfecto excepto que el:
$objWriter = PHPExcel_IOFactory::createWriter($prueba, 'Excel2007');
$objWriter->save('prueba.xlsx');
me genara un archivo con permisos 644 y no se porque, y desde otro archivo no lo puedo borrar, alguien sabe la solucion??
Muchas Gracias