Los clientes aman los botones de “Descargar Excel”. En 2026, PhpSpreadsheet es la librería estándar para manejar hojas de cálculo en PHP de forma robusta.
Solución Rápida (Code Snippet)
Instala la librería con composer require phpoffice/phpspreadsheet y usa este script para exportar tu tabla MySQL.
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 1. Encabezados
$sheet->setCellValue('A1', 'ID');
$sheet->setCellValue('B1', 'Nombre');
$sheet->setCellValue('C1', 'Email');
// 2. Datos desde MySQL (Ejemplo)
$datos = [
[1, 'Juan Perez', 'juan@example.com'],
[2, 'Maria Lopez', 'maria@example.com']
];
$fila = 2;
foreach ($datos as $row) {
$sheet->setCellValue('A' . $fila, $row[0]);
$sheet->setCellValue('B' . $fila, $row[1]);
$sheet->setCellValue('C' . $fila, $row[2]);
$fila++;
}
// 3. Descarga forzada
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="reporte_ventas.xlsx"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;
Cómo funciona
- Objeto Spreadsheet: Crea una representación en memoria de tu libro de Excel.
- Celdas: Usamos
setCellValuepasando la coordenada (A1, B2, etc.). PhpSpreadsheet se encarga de convertir los tipos de datos de PHP a tipos de Excel. - Writers: La librería soporta múltiples formatos.
Xlsxpara archivos modernos,Xlspara antiguos, yCsvpara archivos de texto plano. - Streams: Al usar
php://output, enviamos el archivo directamente al navegador sin guardarlo físicamente en el servidor, lo que ahorra espacio y mejora la privacidad.
Tips de Formato
Puedes aplicar negritas, colores y anchos de columna automáticos:
$sheet->getStyle('A1:C1')->getFont()->setBold(true);
Enlaces Internos
- Visualiza estos datos antes de exportarlos con Gráficos Dinámicos en Chart.js.
- Protege tus reportes con un Manejo Seguro de Sesiones.
Preguntas Frecuentes
¿Puedo exportar miles de filas?
Sí, pero ten cuidado con el límite de memoria de PHP. Para millones de filas, considera usar CSV con fputcsv para mayor eficiencia.
¿Cómo añado varias hojas?
Usa $spreadsheet->createSheet() para añadir nuevas pestañas a tu libro de Excel.