Crear documentos xlsx de hojas de cálculo con PHP y la librería PhpSpreadsheet es sencillo.
Para ello necesitamos descargar PhpSpreadsheet a nuestro proyecto:
composer require phpoffice/phpspreadsheet
ver documentación en https://phpspreadsheet.readthedocs.io/en/latest/
Ahora creamos un nuevo documento de php con el siguiente código:
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$plantilla = new Spreadsheet();
$sheet = $plantilla->getActiveSheet();
$sheet->setCellValue('A1', 'Hola PhpSpreedsheet !');
$catalogos = $plantilla->createSheet();
$catalogos->setTitle('Catalogos');
$dc_array = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];$column_array = array_chunk($dc_array, 1);$catalogos->fromArray($column_array,NULL,'A2');
$validation = $sheet->getCell('B5')->getDataValidation();
$validation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);
$validation->setFormula1('Catalogos!A1:A100');
$validation->setAllowBlank(false);
$validation->setShowDropDown(true);
$validation->setShowInputMessage(true);
$validation->setPromptTitle('Nota');
$validation->setPrompt('*Requerido');
$validation->setShowErrorMessage(true);
$validation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP);
$validation->setErrorTitle('Opción no válida');
$validation->setError('Seleccione una opción');
$writer = new Xlsx($spreadsheet);
$writer->save('paginalista.xlsx');
?>
Creamos la plantilla del documento
$plantilla = new Spreadsheet();
Obtenemos la hoja activa
$sheet = $plantilla->getActiveSheet();
Colocamos un comentario
$sheet->setCellValue('A1', 'Seleccione su mes preferido');
Creamos una nueva hoja a la que llamaremos Catalogos donde colocaremos nuestros datos que usaremos posteriormente$catalogos = $plantilla->createSheet();
$catalogos->setTitle('Catalogos');
Creamos el arreglo de los datos a visualizar y los agregamos a la hoja de Catalogos$dc_array = ['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'];$column_array = array_chunk($dc_array, 1);$catalogos->fromArray($column_array,NULL,'A2');
Obtenemos la posición donde vamos a colocar el listado$validation = $sheet->getCell('B5')->getDataValidation();
Indicamos el tipo de celda que nos permite usar los listados
$validation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);
Colocamos el rango a utilizar en nuestra lista, el cual se encuentra en la hoja de Catalogos$validation->setFormula1('Catalogos!A1:A100');
Asignamos valores para nuestro combo
$validation->setAllowBlank(false);
$validation->setShowDropDown(true);
$validation->setShowInputMessage(true);
$validation->setPromptTitle('Nota');
$validation->setPrompt('*Requerido');
$validation->setShowErrorMessage(true);
$validation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP);
$validation->setErrorTitle('Opción no válida');
$validation->setError('Seleccione una opción');
Generamos nuestro documento$writer = new Xlsx($plantilla);
$writer->save('ms.xlsx');
ejecutamos nuestro php
Así obtenemos nuestro archivo, al abrirlo podemos observar lo siguiente:
y nuestro listado desplegado
y en la pestaña de Catalogos tenemos nuestro listado
En algunos casos cuando intentamos poner datos del listado directamente en
$validation->setFormula1('"Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo"');
podemos llegar a encontrar un límite de uso en la longitud de la fórmula. Por eso, colocamos los datos en otra hoja y los obtenemos a través de la referencia:
Catalogos!A1:A100
Espero les ayude y dejen sus comentarios.¡Éxito!
No hay comentarios.:
Publicar un comentario