miércoles, 2 de noviembre de 2022

Validacion de datos en ExcelJS

 Hoy les traigo a la mano la información para poder crear datavalidation con ExcelJS o bien un dropdownlist en los archivos exportados desde java, sin mas por el momento vamos al codigo.


Un dataValidation permite agregar dropdownlist a una hoja de excel esta puede ser asignada por medio de un array de tipo string o bien hacer referencia de la informacion en otra hoja.


En el ejemplo de hoy veremos el caso de crear la lista a partir de la referencia de otra hoja del mismo documento, para ello creamos nuestro objeto Workbook. 


  
     var workbook = new ExcelJS.Workbook();
     workbook.creator = 'DivingJS';
     workbook.lastModifiedBy = 'inovania.blogspot.com';
     workbook.created = new Date();
     
  

Ahora por el momento agregaremos el primer registro que bien puede servir como header del documento para ello.

	var workSheet=workbook.addWorksheet("sheet_1");
    workSheet.addRow(["item 1","item 2", "item 3"]);

Aquí agregamos el contenido de la segunda hoja

	var workSheet_2=workbook.addWorksheet("sheet_2");
    workSheet_2.addRow(["elemento 1"]);
    workSheet_2.addRow(["elemento 2"]);
    workSheet_2.addRow(["elemento 3"]);
    workSheet_2.addRow(["elemento 4"]);
    workSheet_2.addRow(["elemento 5"]);
    workSheet_2.addRow(["elemento 6"]);
    

Una vez teniendo esto lo que sigue es agregar la regla para poder generar el dataValidation, esto queda de la siguiente manera.

    worksheet.getCell("B2").dataValidation = {
         type: 'list',
         allowBlank: true,
         showInputMessage: true,
         showErrorMessage: true,
         formulae: ["=sheet_2!$A$1:$A$6"]

Ahora bien, recibe los parametros allowBlank , showInputMessage, showErrorMessage, type, formulae. la propiedad type corresponde al tipo de dato que estará alojado en la celda seleccionada en este caso una lista.

En el parámetro formulae recibe un arreglo o en este caso la referencia para hacer un arreglo el cual lo encontrara en la hoja 2 asociado de la celda A1 a la celda A6. 

De esta manera es como referenciamos a otra hoja para crear nuestra lista.

Por ultimo exportamos el archivo y listo.

   await workbook.xlsx.writeBuffer()
         .then(buffer => saveAs(new Blob([buffer]),obj.name))
         .catch(err => console.log(err));

No olvides seguirme para ser de los primeros a quienes les llegue la notificación de lo que se publique.