viernes, 6 de agosto de 2021

Crear archivo Xlsx con lista despegable sin límite de opciones

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



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