Introducción

Este es el primer post de muchos que espero hacer sobre trabajar con archivos de Excel u hojas de cálculo con PHP y la librería llamada PHPSpreadsheet.

Lo que veremos hoy será:

  1. Cómo descargar la librería, además de ver las opciones que necesita
  2. Escribir hola mundo
  3. Escribir propiedades de documentos

Actualización

Mira la parte 2 de este tutorial: Leer archivos de Excel con PHP.

Sobre la librería

Antes de continuar quiero dejar en claro que toda la documentación está aquí. Si algo no queda claro o deseas profundizar en el tema te invito a leerla. El repositorio en GitHub es este.

Necesita la versión de PHP 5.6 o una más nueva, y las siguientes extensiones:

  • php_zip
  • php_xml
  • mb_string
  • dom (opcional)
  • php_gd2 (opcional)

Por cierto, esta es la sucesora de PHPExcel.

Descargar librería

Lo más recomendable es usar composer (aquí hay un tutorial de su instalación, y aquí puedes ver por qué usar Composer o cómo adaptarlo a tu proyecto). No importa si ya tenemos un proyecto con composer o si es uno nuevo, abrimos la terminal, nos ponemos en el lugar en donde esté y  ejecutamos:

composer require phpoffice/phpspreadsheet

Así como se ve en la imagen:

Instalar PhpSpreadsheet

Instalar PhpSpreadsheet

Luego, en caso de no estar incluyendo el autoload, lo incluimos:

Más tarde indicamos que usaremos algunas clases con espacios de nombres:

Y ya podemos comenzar a trabajar.

Crear documento y poner propiedades

Crearemos un documento, le pondremos algunas propiedades y veremos las cosas básicas.

Ahí no estamos agregando nada, simplemente creamos un nuevo documento y lo guardamos como nombre_del_documentl.xlsx.

Las propiedades son opcionales, pero las puse para que veamos las posibilidades. En este caso se queda guardado en el mismo lugar en donde ejecutamos el script.

Mandar documento al navegador para que se descargue, en lugar de guardarlo

Puede que quieras saber cómo se puede descargar directamente. No te preocupes, la librería ya tiene un ayudante. Veamos cómo crear el documento y hacer que se descargue.

 

En lugar de usar el Writer usamos a IOFactory y mandamos toda la salida a php://output.

Nota sobre los encabezados: sería una larga plática hablar sobre HTTP, pero basta saber que no debemos imprimir otra cosa si queremos que el documento se descargue.

Y cuando digo nada me refiero a NADA, el script debe ejecutarse y salir sin que se imprima otra cosa, ni errores.

Para eso es el exit al final, para que no cometamos el error de incluir el archivo e imprimamos algo o cosas por el estilo.

Ah, por otro lado el creador dice que si queremos que funcione con internet explorer debemos agregar más encabezados, de manera que quede así:

Finalmente aquí un GIF de cómo se descarga el documento:

Descargar documento de Excel generado por PhpSpreadsheet

Descargar documento de Excel generado por PhpSpreadsheet

Revisar propiedades del documento

Al menos con Windows, así se ve lo que creamos:

Propiedades del documento creado con PhpSpreadsheet

Propiedades del documento creado con PhpSpreadsheet

Eso nos da a entender que sí está guardando las propiedades.

Agregar contenido al documento

Recordemos que un documento de estos puede tener muchas hojas. Y cada hoja tiene celdas que tienen una posición, por ejemplo A1, B5, etcétera.

Podemos ver a una hoja como un gigante arreglo bidimensional, o como una tabla.

Para modificar las celdas debemos obtener primero la hoja, pues un libro de estos se compone de hojas. Una vez que la tenemos, vemos que tenemos dos formas de modificar las celdas.

La primera (setCellValueByColumnAndRow) es la que recomiendo y prefiero: establecer el valor a partir de la columna y fila; usamos números como coordenadas; eso sí, deben ser a partir del 1, no del 0 como estamos acostumbrados siendo programadores.

El tercer argumento son los datos que le vamos a pasar, los cuales pueden ser de cualquier tipo que pueda mostrar el libro.

Existe una segunda forma y es usar las coordenadas con letras (setCellValue). Esto sólo recibe 2 argumentos, las coordenadas y los datos.

El nombre o título de la hoja puede ser cambiado opcionalmente con $hoja->setTitle("El título");, si no lo ponemos se pondrá Worksheet me parece.

Sin importar cómo, al final todos los cambios se guardan y el resultado se ve así:

Hoja de cálculo con contenido agregado con PHP

Hoja de cálculo con contenido agregado con PHP

Simple y poderoso, como todo debe ser.

Conclusiones y notas

Esto fue un primer acercamiento a PhpSpreadsheet, pero ya tenemos las bases con las que trabajar. Ya vimos cómo escribir documentos y descargarlos o guardarlos, cosa que omitiremos en los siguientes tutoriales.

A partir de esto ya nos damos una idea de cómo generar cosas más interesantes, porque una vez que tenemos acceso a las celdas podemos modificarlas a nuestro antojo.

Con esta librería podemos generar gráficas, poner fórmulas, establecer contraseñas y obviamente leer documentos, entre otras cosas.

Estoy interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

2 Comments

salvador · diciembre 12, 2018 a las 1:41 pm

Agregar la ruta completa de IOFactory
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($documento, ‘Xlsx’);

Leer archivo de Excel con PHP y PHPSpreadSheet - Parzibyte's blog · febrero 14, 2019 a las 1:00 pm

[…] vimos cómo escribir a una hoja de cálculo usando PHPSpreadSheet; hoy veremos el proceso “inverso” y es leer el contenido de todo un documento de […]

Deja un comentario

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: