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/phpspreadsheetEjemplo: 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/openspoutEjemplo: 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>"; }}?> También en la biblioteca
Cliente OAuth para Go (Golang): Conexión a proveedores OAuth 2.0
Tokens JWT en Kotlin: generación, verificación y uso con io.jsonwebtoken
ORM para Java: comparación de Hibernate, MyBatis y JPA con ejemplos
Biblioteca estándar de Go (Golang): guía completa