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.