Algo muy importante en las aplicaciones son los reportes que generalmente se hacen en documentos PDF, Hojas de Calculo, etc.
Las hojas de calculo como Microsoft Excel (.xls) son las mas difundidas en el mercado, es normal que las aplicaciones soporten este formato para sus reportes.
Para generar reportes en Excel en PHP hay varias formas, algunas necesitan que las librerías estén instaladas en los servidores, y otras solo logran escribir en las celdas sin formato o tipo de dato.
Hace poco estuve desarrollando reportes para una Aplicación Web donde desarrolle una clase que me permitió completar los reportes basados en Excel.
La clase se la puede descargar del siguiente link class.excel.writer.php, esta clase se basa en el formato HTML para Microsoft Excel.
Algunas características:
Ejemplo 1: Ejemplo simple del uso de esta clase.
Ejemplo 2: Ejemplo de un reporte simple.
Ejemplo 3: Ejemplo de un reporte con estilo.
Los reportes que hice son mas complejos que los ejemplos anteriores, para ello tuve que modificar la clase.
Esta clase esta libre para su uso, pueden modificarlo a su gusto, y si es posible mandarme los cambios y/o publicarlos en alguna dirección Web.
09/08/2013: He actualizado el codigo fuente para que trabaje con XML, y funciona mejor para Microsoft Excel
09/08/2013: Para los usuarios avanzados les recomiendo PHPExcel
Escrito por mcedwin para TECNato
Desarrollador Web, Especialista en diseño y tecnologías Web. Profesional en Ingeniería de Sistemas.
TECNato nace de la idea de crear una comunidad tecnológica, un espacio virtual para compartir conocimientos sobre TIC’s (Tecnologías de la Información y Comunicación).
TECNato es libre y abierto a nuevos miembros que estén dispuestos a compartir sus conocimientos en TIC’s, así que no dudes en escribirnos para mas detalles.
Diseño Web:
Grupo Sistemas
CMS:
WordPress
43 comentarios
20 de agosto del 2010
MUCHAS GRACIAS, ESTO ERA LO QUE ESTABA BUSCANDO, ME AS AYUDADO MUCHO :D
24 de septiembre del 2010
gracias Edwin, nos encontraremos por Puno todavia por diciembre estoy seguro que me va ser de gran utilidad.
2 de agosto del 2011
Hola, buen aporte, ahora justo estoy con generacion de reportes.
25 de agosto del 2011
De favor podria alguien pasarme esta clase class.excel.writer.php
Saludos/Gracias.
25 de agosto del 2011
Oscar, esta en el primer link, pero aquí la dirección: http://www.mcedwin.com/excel/class.excel.writer.php.txt
6 de octubre del 2011
No estan disponibles los archivos de los enlaces, podrias subirlos nuevamente
6 de octubre del 2011
Gracias por el aviso, ya están disponibles los archivos.
7 de octubre del 2011
Gracias!!
19 de enero del 2012
Hola Edwin muchas gracias por el aporte , funciona muy bien la libreria; de casualidas tendras algun ejemplo que utilice una base de datos desde la que se extrae la informacion para enviarla a un archivo en excel, saludos
1 de marzo del 2012
Hola, muchas gracias por la información, una pregunta: ¿es gratis?
Gracias!
1 de marzo del 2012
Si es gratis, pero pagarías?
21 de mayo del 2012
Gracias por la información, una pregunta:¿Se puede añadir imagen?
27 de mayo del 2012
porque cuando se le coloca un borde o cualquier otra cosa que se le agrege ya no se alinean las celdas??? alguien me explica eso?
31 de mayo del 2012
si no es muy costosa si :)
5 de julio del 2012
hola no me genera el documento de excel gracias mi correo es ingenierojuandavid_7@hotmail.com porfa necesito ayuda
7 de septiembre del 2012
Hola muy bueno para la exportacion a excel, pero hay un pequeño problema con en esta linea de codigo ereg( «([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})», ’07/08/2000′, $aFecIni);
en versiones superiores de php 5.3.x sa este error Deprecated: Function ereg() is deprecated in C:\Ampps\www\PHPEXCEL\php-excel-demo2\class.excel.writer.php on line 249 la razon es que no la funcion ereg ha quedado obselo. Como se prodria solucionar este problema.
7 de septiembre del 2012
claro, es por el servidor: puedes remplazarlo por la funcion preg(«([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})»,…….
22 de septiembre del 2012
hola, me gustaria saber como se saca un reporte pero consultando de una base de datos , les agradesco esa informacion.
9 de octubre del 2012
PERO AS INTENTADO JALAR DATOS DESDE UNA BASE DE DATOS XK ES LO K YO NECESITO PARA JALAR LA INFORMACION DESDE UNA BASE DE DATOS Y EL TUYO SOLO ES QUE LE ASIGNAS LOS DATOS
18 de octubre del 2012
gracias amigo me fue de gran ayuda desde lima t deseo lo mejor en tus metas
15 de noviembre del 2012
HE PROBADO EL SCRIPT Y NO ME SALE NADA, QUE ECHO MAL AYUDA POR FAVOR.
‘int’,’border’=>’000000′); $xls_date = array(‘type’=>’date’,’border’=>’000000′); $xls_normal = array(‘border’=>’000000’); $textos = array(‘aaaa bbbb cccc ddddd’,’bbbb aaaaa dddd’,’cccc dsdsd’,’dddd asdfasdf’,’eeee asdfasdfw’,’erwssd ds werwwe v ytjrheth werwwe jdrfger werwwe kfghtr werwwe’,’gggg’,’hhhh’,’iiii’,’kkkkkk’); $colores = array(‘F17C0E’,’0012FF’,’06FF00′,’FF0000′,’AE00FF’,’BCA8E6′,’7E8D00′,’9D9D96′,’00789B’,’FF4E00′); $arr = array(‘ITEM’,’TEXTOS’,’ENTEROS’,’FECHAS’,’COLORES’); $xls->OpenRow(); foreach($arr as $cod=>$val) $xls->NewCell($val,false,array(‘align’=>’center’,’background’=>’666666′,’color’=>’FFFFFF’,’bold’=>true,’border’=>’000000′)); $xls->CloseRow(); for($i=0;$iOpenRow(); $xls->NewCell($i+1,false,$xls_int); $xls->NewCell($textos[$i],true,$xls_normal); //Auto alineado $xls->NewCell(rand(100,10000),false,$xls_int); $xls->NewCell(date(‘d/m/Y’,time()+24*60*60*$i),false,$xls_date); $xls->NewCell(rand(100,10000),false,array(‘type’=>’int’,’width’=>’250′,’color’=>$colores[rand(0,9)],’background’=>$colores[rand(0,9)],’border’=>’000000′)); $xls->CloseRow(); } $xls->GetXLS(); ?>
23 de noviembre del 2012
a esta clase le funciona algo similar al colspan?
9 de enero del 2013
Saludos desde Colombia,
aparece un error que dice:
[Wed Jan 09 12:13:22 2013] [error] [client ::1] PHP Notice: Undefined index: type in /home/andres/workspace/sac/apps/escrutinio/includes/class/ExcelWriter.php on line 233
[Wed Jan 09 12:13:22 2013] [error] [client ::1] PHP Notice: Undefined index: type in /home/andres/workspace/sac/apps/escrutinio/includes/class/ExcelWriter.php on line 236
[Wed Jan 09 12:13:22 2013] [error] [client ::1] PHP Notice: Undefined variable: align in /home/andres/workspace/sac/apps/escrutinio/includes/class/ExcelWriter.php on line 294
22 de marzo del 2013
Solución para los que le salen algunos problemas.
1: problema: Notice: Undefined index: type in
1: solución: buscar esta linea «if($style[‘type’]==’int’){»
y justo encima colocar «if(!isset($style[‘type’])) $style[‘type’]=’normal’;»
2: poblema: Undefined variable: align in
2: solución: crear una variable al inicio del la función NewCell
con el nombre y valor de : «$align = »;»
NOTA: El problema en ambos casos es que la variable que emplea no esta inicializada, por lo tanto lo hago es inicializarlo.
Es mi solución, si alguien consigue una mejor manera… seria excelente.
Saludos Miguel
18 de junio del 2013
se puede usar esto a traves de, una consulta de una BBDD? y si es asi, como se podría usar?
18 de junio del 2013
Hola … con esta clase, se puede crear otras hojas en el mismo libro¿
4 de julio del 2013
hola, gracias por la información proporcionada, tengo una consulta sobre el comportamiento del excel al momento de abrir el archivo, esto cuando se desea abrir grandes volúmenes de datos, arriba de 50000 o 60000 filas.
gracias
24 de julio del 2013
Buenas, interesante clase, me funcionó a la primera, excepto la fecha, me pone siempre 30/11/1999, lo que hice fue probar dejándola tal cual me la envia mysql, y después pasándola a castellano, pero siempre me sale mal.
Me he fijado en el ejemplo, y puse mi fecha, con una coma y poniendo el timer aleatorio, pero nada, ¿alguna solución?.
Gracias, sergio
24 de julio del 2013
estuvo fabuloso podrian ayudarme en algo mas por favor.
Es en la creacion de graficos estadisticos apartir de datos que salen de una consulta a una base de datos…
le agredeceria mucho si pueden ayudarme
2 de agosto del 2013
Hola, no me funca el script, me sale esto:
«‘int’); $xls_date = array(‘type’=>’date’); $textos = array(‘aaaa bbbb cccc ddddd’,’bbbb aaaaa dddd’,’cccc dsdsd’,’dddd asdfasdf’,’eeee asdfasdfw’,’erwssd ds werwwe v ytjrheth werwwe jdrfger werwwe kfghtr werwwe’,’gggg’,’hhhh’,’iiii’,’kkkkkk’); $arr = array(‘ITEM’,’TEXTOS’,’ENTEROS’,’FECHAS’); $xls->OpenRow(); foreach($arr as $cod=>$val) $xls->NewCell($val,false,array(‘bold’=>true)); $xls->CloseRow(); for($i=0;$iOpenRow(); $xls->NewCell($i+1,false,$xls_int); $xls->NewCell($textos[$i],true,$xls_normal); //Auto alineado $xls->NewCell(rand(100,10000),false,$xls_int); $xls->NewCell(date(‘d/m/Y’,time()+24*60*60*$i),false,$xls_date); $xls->CloseRow(); } $xls->GetXLS(); ?>»
Alguien sabe que hacer con dicho problema???
Muchas gracias.
8 de agosto del 2013
Revisando…., tratare de solucionar los problemas para esta noche GMT-5, disculpen la demora.
9 de agosto del 2013
Solucionado varios de los errores, pero para los usuarios avanzados les recomiendo PHPExcel http://phpexcel.codeplex.com/
20 de septiembre del 2013
Hola he implementado esta clase para un botón que extrae información de 3 columnas de una tabla que se muestra en html con jQuery, despues de presionar el botón, genero el excel y la descarga, mi pregunta es: como puedo establecer un nombre para el archivo excel, es que siempre tiene el mismo, hice algo así: function setNameFileExcel($name){ $this->name; } y en el archivo donde llamo la clase uso $xls->setNameFileExcel(«nombre del archivo excel»); y ya despues hago lo demas para generar el archivo, pero no me cambia el nombre al descargar, hay algo que podamos hacer? Gracias
11 de octubre del 2013
Hola.
Tengo problemas con los números decimales. Siguiendo el mismo ejemplo que para números enteros, he puesto lo siguiente:
$xls_double = array(‘type’=>’double’);
$doubles = array(‘4,6′,’3,6′,’8,4′,’5,5′,’6,2′,’4,2′,’2,3′,’6,4′,’4,56′,’5,55’);
for($i=0;$iOpenRow();
$xls->NewCell($doubles[$i],false,$xls_double);
$xls->CloseRow();
}
Pero cuando se crea el archivo aparecen con formato texto (se quedan en el lado izquierdo) en vez de con formato numérico (alineados al lado derecho de la celda). Esto da problemas a la hora de realizar operaciones.
¿Podrías poner un ejemplo de cómo sería?
Gracias
3 de abril del 2014
Es posible realizar la suma de varios numeros de una columna y mostrar el resultado bajo esa columna??
3 de abril del 2014
ya lo hice, gracias.
15 de abril del 2014
Tengo un problema, estoy probando la clase, utilizo el primer ejemplo, pero me genera una archivo xml con los datos, en vez de generar el excel.
Estaré haciendo algo mal??
Una ayudita por favor.
Gracias.
14 de mayo del 2014
Hola buenas tardes , la clase esta muy buena pero tengo un problema funciona perfecto de la columna A a la Z pero cuando llego a la Columna AA se daña el reporte , donde podria modificar o que debo hacer para q tome columnas sin limites. Muchas Gracias.
14 de mayo del 2014
Acabo de probar y no me sale ningún error sobrepasando de la A a la Z.
13 de agosto del 2014
Hola ! Muy bueno te felicito.
Solo funciona con Excel en Windows, lo probe en Ubuntu y no me funcionó.
Igualmente un crack
22 de octubre del 2014
Un favor como cargo o incluyo la clase para que funcione, perdón tal vez es una pregunta tonta pero no lo se y me interesa el tema…gracias
4 de mayo del 2015
Tal cual lo estaba buscando: sencillo y practico… muchas gracias!!
16 de marzo del 2016
como puedo exportar 2 tablas en el mismo excel