Exportar a Excel con PHP y PHPSpreadsheet

0
21423

PhpSpreadsheet es una librería bastante utilizada y constantemente actualizada. Este será un tutorial desde su instalación hasta la descarga de un archivo excel.

Acerca de la librería

Está librería cuenta con una muy completa documentación que la pueden encontrar en la siguiente enlace:

PHPSpreadSheet’s Documentation.

Si desean mayor información sobre el tema, también pueden consultar el repositorio en GitHub.

GitHub – PHPOffice/PhpSpreadsheet

Antes de empezar, necesitaran la versión de PHP 5.6 o una más reciente, y las siguientes extensiones:

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

Descargar la librería

Para empezar, abrimos nuestro terminal y nos situamos en la carpeta de nuestro proyecto y ejecutamos:

composer require phpoffice/phpspreadsheet

Con esto se creara una carpeta /vendor en tu proyecto con la siguiente estructura, y luego incluir el archivo autoload.php

vendor
  |
  ├─ composer
  |
  └─ phpoffice
        |
        └─ phpspreadsheet

require __DIR__ . "/vendor/autoload.php";

Ahora debemos declarar los namespaces que utilizaremos para generar los archivos Excel.

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

Ya podemos comenzar a trabajar.

Crear documentos y guardarlo

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


require __DIR__ . "/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spread = new Spreadsheet();
$spread
    ->getProperties()
    ->setCreator("Nombre del autor")
    ->setLastModifiedBy('Juan Perez')
    ->setTitle('Excel creado con PhpSpreadSheet')
    ->setSubject('Excel de prueba')
    ->setDescription('Excel generado como prueba')
    ->setKeywords('PHPSpreadsheet')
    ->setCategory('Categoría de prueba');
 
$writer = new Xlsx($spread);
 
# Le pasamos la ruta de guardado
$writer->save('/exports/reporte_20180101.xlsx');

Descargar documento

A diferencia del script anterior, el siguiente podrá realizar la descarga directamente sin necesidad de guardarlo.


require __DIR__ . "/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spread = new Spreadsheet();
$spread
    ->getProperties()
    ->setCreator("Nombre del autor")
    ->setLastModifiedBy('Juan Perez')
    ->setTitle('Excel creado con PhpSpreadSheet')
    ->setSubject('Excel de prueba')
    ->setDescription('Excel generado como prueba')
    ->setKeywords('PHPSpreadsheet')
    ->setCategory('Categoría de prueba');
 
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="Reporte Excel"');
header('Cache-Control: max-age=0');
 
$writer = IOFactory::createWriter($spread, 'Xlsx');
$writer->save('php://output');
exit;

Agregar contenido al archivo Excel

Cada documento Excel puede tener muchas hojas dentro. Y cada hoja tiene celdas que tienen una posición para poder identificarla (A1, B2, …).


require __DIR__ . "/vendor/autoload.php";
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spread = new Spreadsheet();

$sheet = $spread->getActiveSheet();
$sheet->setTitle("Hoja 1");
$sheet->setCellValueByColumnAndRow(1, 1, "Valor en la posición 1, 1");
$sheet->setCellValue("B2", "Valor en celda B2");
$writer = new Xlsx($spread);
$writer->save('reporte.xlsx');

LEAVE A REPLY

Please enter your comment!
Please enter your name here