Trabajo con Excel en PHP: bibliotecas PhpSpreadsheet y OpenSpout

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Excel en PHP: resumen de las bibliotecas PhpSpreadsheet y OpenSpout



Trabajar con hojas de cálculo de Excel es una de las tareas más comunes en el desarrollo web con PHP. Ya sea para generar informes, importar datos de sistemas contables o exportar estadísticas para clientes, no se puede prescindir de herramientas para trabajar con formatos .xlsx y .xls. En este artículo, analizaremos las dos bibliotecas PHP más populares: PhpSpreadsheet (sucesora de la famosa PHPExcel) y OpenSpout (una alternativa ligera para archivos grandes).



PhpSpreadsheet — una herramienta potente y funcional



PhpSpreadsheet es una biblioteca del proyecto PHPOffice que permite leer, crear y modificar archivos de Excel (XLSX, XLS, ODS, CSV y otros). Admite estilización de celdas, fórmulas, gráficos, formato condicional e incluso trabajo con macros.



Instalación de PhpSpreadsheet

La instalación se realiza a través de Composer:

composer require phpoffice/phpspreadsheet


Ejemplo: creación de un archivo Excel simple

<?phprequire 'vendor/autoload.php';

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

$spreadsheet = new Spreadsheet();$sheet = $spreadsheet->getActiveSheet();

// Rellenamos datos$sheet->setCellValue('A1', 'ID');$sheet->setCellValue('B1', 'Nombre');$sheet->setCellValue('C1', 'Email');$sheet->setCellValue('A2', 1);$sheet->setCellValue('B2', 'Iván Petrov');$sheet->setCellValue('C2', 'ivan@example.com');

// Estilización del encabezado$styleArray = [ 'font' => ['bold' => true, 'size' => 14], 'fill' => ['fillType' => 'solid', 'startColor' => ['rgb' => 'E0E0E0']]];$sheet->getStyle('A1:C1')->applyFromArray($styleArray);

// Guardamos el archivo$writer = new Xlsx($spreadsheet);$writer->save('users.xlsx');echo "¡Archivo users.xlsx creado!";?>


Lectura de un archivo Excel existente

<?phprequire 'vendor/autoload.php';

use PhpOffice\\PhpSpreadsheet\\IOFactory;

$inputFileName = 'users.xlsx';$spreadsheet = IOFactory::load($inputFileName);$sheet = $spreadsheet->getActiveSheet();

foreach ($sheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); $rowData = []; foreach ($cellIterator as $cell) { $rowData[] = $cell->getValue(); } echo implode(' | ', $rowData) . "<br>";}?>


OpenSpout — ligereza y velocidad para grandes datos



OpenSpout es una biblioteca creada para trabajar con grandes volúmenes de datos (cientos de miles de filas). A diferencia de PhpSpreadsheet, no carga todo el archivo en memoria, sino que lo procesa en flujo. Esto la hace ideal para exportar/importar informes voluminosos. OpenSpout admite los formatos XLSX, CSV y ODS.



Instalación de OpenSpout

composer require openspout/openspout


Ejemplo: exportación de 100 000 filas a XLSX

<?phprequire 'vendor/autoload.php';

use OpenSpout\\Writer\\XLSX\\Writer;

$writer = new Writer();$writer->openToFile('big_export.xlsx');

// Encabezados$writer->addRow(['ID', 'Nombre', 'Email']);

for ($i = 1; $i <= 100000; $i++) { $writer->addRow([$i, "Usuario $i", "user$i@example.com"]);}

$writer->close();echo "¡Archivo big_export.xlsx con 100 000 filas creado!";?>


Lectura de un archivo grande con OpenSpout

<?phprequire 'vendor/autoload.php';

use OpenSpout\\Reader\\XLSX\\Reader;

$reader = new Reader();$reader->open('big_export.xlsx');

foreach ($reader->getSheetIterator() as $sheet) { foreach ($sheet->getRowIterator() as $row) { $cells = $row->getCells(); echo implode(' | ', array_map(function($cell) { return $cell->getValue(); }, $cells)) . "<br>"; }}?>

Recommendations