Hace algún tiempo, Jorge Nitales nos enseñaba como exportar a Excel desde PHP, mediante un sencillo método en el que mediante el envío de cabeceras era posible formatear un documento para ser leído desde Excel.
Como en CLH estamos en constante investigación para presentar nuevos métodos y alternativas para hacer las cosas, hoy les traemos, mediante un sencillo tutorial una nueva forma para que puedan generar archivos en formato Excel de forma rápida y con una flexibilidad increible en cuanto a la configuración del documento.
El detalle, como siempre, después del salto.
En el tutorial pasado, Jorge Nitales nos enseñaba un proceso en el cual, mediante el uso de cabeceras, hacíamos una exportación directa de un archivo en formato HTML, el cual era convertido y enviado a quien ejecutaba el código en formato xls.
Si bien ese método presenta ventajas notables, como principalmente su rapidez y facilidad de generación de los archivos, así como la sencillez de la organización de la información del documento (ya que podíamos hacer usos de tablas para tabular los datos), por otro lado se presentan las desventajas de que el archivo creado no es realmente un formato propio de Excel y por ende presenta una pequeña advertencia al abrirlo (aunque funciona sin problemas, puede presentar alguna mala experiencia para los usuarios), lo cual puede traer algunos problemas, especialmente si estamos trabajando con alguna clase en PHP para leer estos archivos generados.
Hoy presentaremos un nuevo método, en el cual utilizaremos un paquete de PEAR, el cual está diseñado especialmente para crear archivos de este tipo y nos proveerá de una serie de métodos para darle formato hasta el más mínimo detalle del documento, permitiéndonos incluso bloquear y proteger las hojas y/o celdas.
Antes de empezar:
¿Qué es PEAR?
PEAR es un conjunto de componentes reutilizables especialmente diseñado para el uso con PHP. Es posible descargar e instalar una serie de paquetes pertenecientes a el, los cuales a su vez nos proveen una serie de clases para realizar distintos tipos de operaciones, ya sea de manipulación de cierto tipo de archivos hasta procesos de imágenes, red e incluso integración de distintos servicios Web.
Desde la versión 4.3.0 de PHP, PEAR viene incluido. De lo contrario es necesario instalarlo de forma manual.
Con esa explicación, vamos a lo que necesitamos:
Nota: Si están trabajando en algún hosting y no están seguros de si está instalado PEAR o el paquete a utilizar, les recomendamos ponerse en contacto con su proveedor de servicios y ver la factibilidad de que lo instalen.
Con eso claro, manos a la obra:
1.- Si ya contamos con PEAR instalado en nuestro servidor, podemos adelantarnos estos pasos. De lo contrario, debemos ir al directorio donde tenemos la instalación de PHP (Si instalamos Xampp, sería c:\xampp\php\).
2.- Dentro de ese directorio encontraremos un archivo llamado go-pear.bat
3.- Ejecutamos el archivo y se iniciará la instalación de PEAR. Si al iniciar nos aparece algún Warning o Error, es muy probable que ya contemos con PEAR instalado en nuestro sistema, por lo que no será necesario llevar a cabo el proceso.
4.- Una vez que termine la instalación, debemos proceder a la instalación del paquete Spreadsheet Excel Writer. Para eso vamos a Menu Inicio > Ejecutar y escribimos cmd para abrir Símbolo de sistema.
5.- Con Símbolo de sistema abierto, nos trasladamos al directorio de PHP, el mismo donde hicimos la instalación de PEAR y escribimos el siguiente comando:
pear install Spreadsheet_Excel_Writer-0.9.1
6.- Al ejecutar el comando anterior, se instalará el paquete:
7.- Con esto ya tenemos nuestro paquete instalado y podemos empezar a programar. Para esto abrimos nuestro editor Web o entorno de programación para PHP y creamos un nuevo archivo al que llamaremos ejemplo.php.
8.- Generaremos un código como el siguiente (comentarios en negrita, cursiva y entre /* y */):
send('ejemplo.xls'); /* Definimos una variable y se la asignamos a nuestro objeto como una hoja del mismo mediante el método addWorksheet, el cual lleva como parámetro el nombre de la hoja. Tal como si crearamos una en un libro normal de Excel */ $hoja =&$libro->addWorksheet('Hoja de prueba'); /* Escribimos los datos en la hoja mediante el método write, el cual toma como parámetros el número de fila, número de columna y el contenido. Si es texto debe ir entre comillas como una cadena. */ $hoja->write(0, 0, 'Nombre'); $hoja->write(0, 1, 'Apellido'); $hoja->write(1, 0, 'Maria'); $hoja->write(1, 1, 'Lopez'); $hoja->write(2, 0, 'Eulalio'); $hoja->write(2, 1, 'Ramirez'); $hoja->write(3, 0, 'Lalo'); $hoja->write(3, 1, 'Landas'); /* Mediante el método close cerramos y enviamos el archivo al usuario */ $libro->close(); ?>
9.- Ahora si ejecutamos ejemplo.php nos lanzará un archivo en formato excel llamado ejemplo.xls
Fácil y bonito, ¿no?. Complíquemoslo un poco, démosle un poco de formato a nuestro texto.
10.- Con el mismo código como base, ahora añadiremos algunas cosas. El formato se crea definiendo una variable y adjuntándola como formato a un libro en particular. Luego, cada vez que queramos utilizar ese formato, lo añadimos como parámetro al momento de escribir datos. Esto quedará más claro en nuestro ejemplo:
send('ejemplo.xls'); /* Definimos una variable y se la asignamos a nuestro objeto como una hoja del mismo mediante el método addWorksheet, el cual lleva como parámetro el nombre de la hoja. Tal como si crearamos una en un libro normal de Excel */ $hoja =&$libro->addWorksheet('Hoja de prueba'); /* Declaramos una variable llamada negrita y la adjuntamos a nuestro libro definiendola como formato mediante el método addFormat */ $negrita = &$libro->addFormat(); /* Luego con la variable negrita, llamamos al método setBold para definir que será negrita */ $negrita->setBold(); /* Repetimos la operación con la variable cursiva pero ahora llamando al método setItalic */ $cursiva = &$libro->addFormat(); $cursiva->setItalic(); /* Escribimos los datos en la hoja mediante el método write, el cual toma como parámetros el número de fila, número de columna, el contenido y la variable con el formato que le daremos a esa celda. Si es texto debe ir entre comillas como una cadena. */ $hoja->write(0, 0, 'Nombre', $negrita); $hoja->write(0, 1, 'Apellido', $negrita); $hoja->write(1, 0, 'Maria', $cursiva); $hoja->write(1, 1, 'Lopez', $cursiva); $hoja->write(2, 0, 'Eulalio', $cursiva); $hoja->write(2, 1, 'Ramirez', $cursiva); $hoja->write(3, 0, 'Lalo', $cursiva); $hoja->write(3, 1, 'Landas', $cursiva); /* Mediante el método close cerramos y enviamos el archivo al usuario */ $libro->close(); ?>
11.- Ejecutamos el archivo y nos enviará ejemplo.xls como descarga, el cual si lo abrimos podremos ver que tiene los datos formateados, tal como definimos:
El formato podemos manejarlo con muchos métodos, tanto de la hoja como de las celdas propiamente tal. Este paquete de PEAR nos permite personalizar todos los aspectos existentes de un libro de Excel, desde colores, codificación del texto, tamaños de letra, formatos de celda e incluso formulas. Lamentablemente son tantos métodos que necesitaríamos bastantes tutoriales para cubrirlos todos, por lo que hemos intentado cubrir su funcionamiento y enseñar la lógica de su uso para que puedan seguir experimentando y llegar al nivel de detalle que deseen.
Pueden encontrar un detalle de los métodos para utilizar en la documentación de Spreadsheet Excel Writer.
Ahora tenemos un método simple y seguro para exportar de PHP a Excel en caso de que necesiten mayor precisión o bien manipular los archivos después con alguna otra clase.
Les recordamos que como siempre, este tutorial ha sido:
Cualquier duda o comentario que puedan tener, los invitamos a dejarnos unas líneas en el área habilitada a continuación.
Esperamos que este tutorial haya sido de utilidad para Uds.
Muchas gracias por leer y será hasta una próxima oportunidad.
Staff CLH
1:35:27 am
cof cof y los creditos????
6:53:53 pm
Hola y si tengo un formato en exce y quiero hacer con sultas con mysql y me las muestre en ese formato de excel como le hago???
alguien me podria ayudar
6:57:51 pm
@seria112: En ese caso debes hacer la extracción de datos en MySQL y luego mostrar las variables en vez de texto fijo en $hoja->write.
Saludos!
1:22:31 pm
Hola Xabadu, segui tus indicaciones para instalar pear. Cuando termine copie tu scrip y al correrlo me dió este error. ¿podrás ayudarme?
Warning: require_once(Spreadsheet/Excel/Writer.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\ejemplo_excel.php on line 3
Fatal error: require_once() [function.require]: Failed opening required ‘Spreadsheet/Excel/Writer.php’ (include_path=’.;C:\php5\pear’) in C:\wamp\www\ejemplo_excel.php on line 3
Esta es la ruta donde tengo instalado pear:
C:\wamp\bin\php\php5.2.8\PEAR
Desde ya muchas gracias
3:47:15 pm
hola xadabu si me podrias explicar a mas detalle mi correo es cede112@hotmail.com
11:32:40 am
opo´´
3:02:23 pm
Hola, me sirvio esta información pero tengo una duda, ¿Cómo puedo dibujar líneas? ¿Esta herramienta cuenta con alguna opción para dibujarlas? ¿Podrían decirme por favor? o ¿Tengo que utilizar los bordes superior inferior izquierdo y derecho?
9:35:17 pm
@Arturo: La verdad solamente ocupamos los bordes para el formato, por lo que desconozco si habrá alguna otra forma. Te recomiendo revisar la documentación que dimos al final del tutorial.
Saludos!
4:08:54 pm
hola mira segui al pie de la letra todos tus pasos kashai pero hubo uno ke no me resulto el de instalar el
pear install Spreadsheet_Excel_Writer-0.9.1
solo ke yo baje la version 0.9.2 :S no kreo ke influya mucho ahora una vez ke hago el ejemplo ke sale el primero me arroja el sgt error
Parse error: parse error in C:\wamp\www\otros\ejemplo.php on line 12
y la linea 12 lo ke tiene es
$hoja =& $libro->addWorksheet(‘Hoja de prueba’);
no se ke hacer porfa si me ayudas
2:13:39 am
Es importante saber si soporta formatos.
¿Cómo se puede formatear el documento?
¿Hay comandos para negritas, colore de celda, combinar celdas, alinear?
Gracias.