Trabajo con Excel en PHP: bibliotecas PhpSpreadsheet y PhpOffice
En el desarrollo web moderno, a menudo surge la necesidad de exportar datos a formato Excel, importar informes o procesar tablas en el lado del servidor. PHP ofrece varias bibliotecas potentes para trabajar con archivos .xlsx, .xls y .ods. En este artículo, analizaremos en detalle PhpSpreadsheet, una biblioteca moderna y en activo desarrollo que reemplazó a la obsoleta PHPExcel.
¿Qué es PhpSpreadsheet?
PhpSpreadsheet es una biblioteca para leer, escribir y editar hojas de cálculo en varios formatos: Excel, OpenDocument, CSV, HTML y PDF. Está escrita en PHP puro, no requiere la instalación de extensiones adicionales (excepto las estándar zip y xml) y admite todas las funciones principales de Excel: estilos, fórmulas, gráficos, formato condicional, múltiples hojas y mucho más.
Instalación
La instalación se realiza a través de Composer:
composer require phpoffice/phpspreadsheetDespués de la instalación, aparece una carpeta vendor con autocarga en el proyecto. Para comenzar, solo necesita incluir el autocargador:
require 'vendor/autoload.php';
use PhpOffice\\PhpSpreadsheet\\Spreadsheet;use PhpOffice\\PhpSpreadsheet\\Writer\\Xlsx;Creación de un archivo Excel simple
Veamos un ejemplo básico: crearemos un archivo con encabezados y varias filas de datos.
// Creamos un nuevo objeto Spreadsheet$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();
// Establecemos los encabezados$sheet->setCellValue('A1', 'Nombre') ->setCellValue('B1', 'Email') ->setCellValue('C1', 'Fecha de registro');
// Rellenamos con datos$sheet->setCellValue('A2', 'Iván Ivanov') ->setCellValue('B2', 'ivan@example.com') ->setCellValue('C2', '2024-01-15');
$sheet->setCellValue('A3', 'María Petrova') ->setCellValue('B3', 'maria@example.com') ->setCellValue('C3', '2024-02-20');
// Guardamos el archivo$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');
echo "¡Archivo users.xlsx creado exitosamente!";Después de ejecutar el script, aparecerá un archivo users.xlsx en la raíz del proyecto, que se puede abrir en Excel o Google Sheets.
Lectura de un archivo Excel existente
PhpSpreadsheet permite leer fácilmente datos de cualquier formato. Ejemplo de carga y visualización del contenido:
$inputFileName = 'users.xlsx';$spreadsheet = \\PhpOffice\\PhpSpreadsheet\\IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();
// Leemos todas las filas$data = $sheet->toArray();
foreach ($data as $row) { echo implode(' | ', $row) . "";}El método toArray() devuelve un array bidimensional, donde el primer elemento es una fila con índices 0,1,2… Puede acceder a las celdas por dirección: $sheet->getCell('A2')->getValue().
Trabajo con estilos y formato
Una de las fortalezas de PhpSpreadsheet es la gestión flexible de la apariencia de la tabla.
$styleArray = [ 'font' => [ 'bold' => true, 'size' => 12, 'color' => ['argb' => 'FF2E4057'], ], 'fill' => [ 'fillType' => \\PhpOffice\\PhpSpreadsheet\\Style\\Fill::FILL_SOLID, 'startColor' => ['argb' => 'FFD9E2EC'], ], 'borders' => [ 'allBorders' => [ 'borderStyle' => \\PhpOffice\\PhpSpreadsheet\\Style\\Border::BORDER_THIN, ], ],];
// Aplicamos el estilo al rango$sheet->getStyle('A1:C1')->applyFromArray($styleArray);
// Autoancho de columnasforeach (range('A','C') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true);}Exportación de datos desde la base de datos a Excel
A menudo es necesario descargar los resultados de una consulta SQL. Ejemplo con PDO: