Excel

Ξ 19 comentarios

Cómo crear archivos Excel desde PHP – Parte 2

por Xabadu
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 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

Comparte este tutorial

El culpable de todo esto

Las tardes gloriosas de domingo y las grandes ovaciones a estadio lleno, no son algo extraño para Xabadu. Luego de ser descubierto a los 4 años en un partido de barrio por los ojeadores del gran Aviación F.C., sacudió el mercado nacional al ser traspasado en $500 pesos chilenos (1 USD) y 3 coca colas al renombrado Estrella Blanca de Lolol. Luego de una impresionante carrera por equipos como Lozapenco, Santa Cruz, Deportivo Lago Chungará y una incursión en la 3a división del futbol de Kazajstan, su record imbatible hasta la fecha de 1257 goles en 20 partidos lo llevo a ser elegido como uno de los arqueros más recordados en la historia pelotera nacional. Una lesión en el colmillo superior derecho lo llevó al retiro el año 2003, pero está de vuelta y sin duda que su jerarquía y experiencia internacional será un gran aporte.

En los barrios marginales se le conoce como: Xabadu

Comentarios en Facebook

19 Comentarios

  • Disculpen, ya vi el detalle.
     
    Saludos por excelente POST.

  • Saludos, quisiera aportar algo de ayuda con referente a  insertar imáenes en un archivo excel, usando esta maravillosa clase, porque tuve muchos problemas para averiguarlo.
    $hoja->insertBitmap(0,0,$images);
    Me gustaria que alguien me ayudara para combinar celdas
    Saludos y gracias

  • send(‘ejemplo.xls’);

    $link = pg_Connect( “host= port= dbname= user=postgres password=”” );

    $pgs = “SELECT * FROM afiliado”;

    $result=pg_query($link, $pgs);

    $numHojas = 1;
    $hoja = $spreadsheet_Excel_Writer->addWorksheet(‘Hoja ‘.$numHojas);

    $hoja->write(0, 0, ‘Nombre’);
    $hoja->write(0, 1, ‘Apellidos’);
    $hoja->write(0, 2, ‘Cedula’);
    $hoja->write(0, 3, ‘Direccion’);
    $hoja->write(0, 4, ‘Telefono’);

    $fila = 1;
    while($tagsIndex=pg_fetch_array($result)){

    if ($fila write($fila, 0, $tagsIndex[‘nombre’]);
    $hoja->write($fila, 1, $tagsIndex[‘apellido_paterno’].’ ‘ . $tagsIndex[‘apellido_materno’]);
    $hoja->write($fila, 2, $tagsIndex[‘numero_documento’]);
    $hoja->write($fila, 3, $tagsIndex[‘dir_habitacion’]);
    $hoja->write($fila, 4, $tagsIndex[‘tlf_per_contacto_emerg’]);
    $fila++;

    }else{

    $numHojas++;

    $hoja = $spreadsheet_Excel_Writer->addWorksheet(‘Hoja ‘.$numHojas);

    $hoja->write($fila, 0, $tagsIndex[‘nombre’]);
    $hoja->write($fila, 1, $tagsIndex[‘apellido_paterno’].’ ‘ . $tagsIndex[‘apellido_materno’]);
    $hoja->write($fila, 2, $tagsIndex[‘numero_documento’]);
    $hoja->write($fila, 3, $tagsIndex[‘dir_habitacion’]);
    $hoja->write($fila, 4, $tagsIndex[‘tlf_per_contacto_emerg’]);
    $fila = 1;

    }

    }

    $spreadsheet_Excel_Writer->close();
    ?>

    Mediante este codigo pueden generar tantas hojas necesites y salta la pagina segun el contador $fila.
    se crea otra hoja por la instancia al metodo addWorksheet de write.php

    espero que les sirva de ayuda

  • // disculpen antes de

    send(‘ejemplo.xls’);

    // va esto

    <?php

    require_once 'Writer.php';

    $spreadsheet_Excel_Writer = new Spreadsheet_Excel_Writer();

    // recuerden que tienen que cambiar ‘’ por comillas simples '', porque aveces de error

  • send(‘ejemplo.xls’);

    $link = pg_Connect( “host= port=5432 dbname= user=postgres password=”” );

    $sql = “SELECT * FROM afiliado WHERE parentesco_fam_mil = ‘8’ and usuario_sistema = ‘SAMAN-INTERFASE'”;

    $result=pg_query($link, $sql);

    $numHojas = 1;
    $hoja = $spreadsheet_Excel_Writer->addWorksheet(‘Hoja ‘.$numHojas);

    $hoja->write(0, 0, ‘Nombre’);
    $hoja->write(0, 1, ‘Apellidos’);
    $hoja->write(0, 2, ‘Cedula’);
    $hoja->write(0, 3, ‘Direccion’);
    $hoja->write(0, 4, ‘Telefono’);

    # Recupera los atributos del archivo
    $fila = 1;
    while($tagsIndex=pg_fetch_array($result)){

    if ($fila write($fila, 0, $tagsIndex[‘nombre’]);
    $hoja->write($fila, 1, $tagsIndex[‘apellido_paterno’].’ ‘ . $tagsIndex[‘apellido_materno’]);
    $hoja->write($fila, 2, $tagsIndex[‘numero_documento’]);
    $hoja->write($fila, 3, $tagsIndex[‘dir_habitacion’]);
    $hoja->write($fila, 4, $tagsIndex[‘tlf_per_contacto_emerg’]);
    $fila++;

    }else{

    $numHojas++;

    $hoja = $spreadsheet_Excel_Writer->addWorksheet(‘Hoja ‘.$numHojas);

    $hoja->write($fila, 0, $tagsIndex[‘nombre’]);
    $hoja->write($fila, 1, $tagsIndex[‘apellido_paterno’].’ ‘ . $tagsIndex[‘apellido_materno’]);
    $hoja->write($fila, 2, $tagsIndex[‘numero_documento’]);
    $hoja->write($fila, 3, $tagsIndex[‘dir_habitacion’]);
    $hoja->write($fila, 4, $tagsIndex[‘tlf_per_contacto_emerg’]);
    $fila = 1;

    }
    }
    $spreadsheet_Excel_Writer->close();
    ?>

  • Muchas gracias por el tutorial 🙂
    Tuve algunas complicaciones con librerias que no tenía, pero recordé un proyecto anterior en joomla y ahí estaban las librerías.
    El ejemplo me ha resultado de lo mejor 🙂 Gracias

  • hola como podria desarrolllar esto con ubuntu…

  • Disculpa, ¿existe alguna forma de exportar las imágenes?, si es que hubiera en la página Web.

    ¡Saludos!

  • Hola:

    Como le hago para exportar a excel desde php?

    Son datos de una base de datos (postgree sql o my sql) tengo que utilizar php y exportarlo a excel.

    Saludos!

1 2

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Gente linda que nos quiere

Donde mas estamos