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.