domingo, 15 de mayo de 2011

Cómo crear archivos Excel desde PHP – Parte 2


Cómo crear archivos Excel desde PHP – Parte 2

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.

Cómo crear archivos Excel desde PHP

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:

Implementos necesarios:

  1. Un servidor Web que ejecute archivos en PHP. Una buena opción es la instalación de XAMPP.
  2. PEAR. Si nuestra versión de PHP es superior a la 4.3.0, lo tendremos instalado por defecto. De lo contrario cubriremos el proceso más adelante.
  3. El paquete Spreadsheet Excel Writer de PEAR, que pueden encontrarlo aqui. Cubriremos su instalación más adelante.
  4. Alguna versión de Excel para leer los archivos generados. Idealmente 2003 o superior.
  5. Un editor Web o entorno de programación para PHP.
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:

Procedimiento:

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 llamaremosejemplo.php.
8.- Generaremos un código como el siguiente (comentarios en negrita, cursiva y entre /* y */):
<?php
/* Llamamos a la clase que ejecutará la exportación a Excel. Esta clase está guardada en el directorio que tenemos habilitado por defecto en nuestro php.ini para los include y require. Si no hemos modificado el php.ini no debemos cambiar nada acá */
require_once ‘Spreadsheet/Excel/Writer.php’;
/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Writer que refleja un nuevo libro de Excel */
$libro = new Spreadsheet_Excel_Writer();
/* Definimos mediante el método send que el archivo debe enviarse al usuario al ejecutar el código y le damos el nombre que tendrá. En este caso ejemplo.xls */
$libro->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:
<?php
/* Llamamos a la clase que ejecutará la exportación a Excel. Esta clase está guardada en el directorio que tenemos habilitado por defecto en nuestro php.ini para los include y require. Si no hemos modificado el php.ini no debemos cambiar nada acá */
require_once ‘Spreadsheet/Excel/Writer.php’;
/* Creamos un nuevo objeto de tipo Spreadsheet_Excel_Writer que refleja un nuevo libro de Excel */
$libro = new Spreadsheet_Excel_Writer();
/* Definimos mediante el método send que el archivo debe enviarse al usuario al ejecutar el código y le damos el nombre que tendrá. En este caso ejemplo.xls */
$libro->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.

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More