Estoy creando una hoja de Excel usando el paquete exceljs en la aplicación nodejs. Tengo una serie de encabezados que he generado como este.
const monthsArray = arrDays.map((str) => ( { header: str, key: str, width: 10 } // Example { header: "12-15-2021", key: "12-15-2021", width: 10} )); let headers = [ { header: "Name", key: "Name", width: 10 }, { header: "Phone", key: "Phone", width: 13 }, { header: "CNIC", key: "CNIC", width: 13 }, { header: "City", key: "City", width: 10 }, ...monthsArray ]; Ahora estoy ejecutando un agregado que me devolverá registros de usuarios y, junto con eso, obtendré un objeto anidado dentro que tendrá registros de asistencia en un día en particular, algo así createdAt: "2021-12-15T19:56:37.984Z" y present: true . Ahora puedo imprimir los encabezados correctamente en la primera fila con fechas en la parte superior de cada columna y antes de eso, dichos datos como nombre, teléfono, ciudad, etc. Sin embargo, necesito saber cómo puedo mostrar los registros de asistencia correctos bajo el correcto ¿columna? De modo que el verdadero debe escribirse en la columna 12-15-2021 para un usuario en particular.
Así es como estoy generando un archivo de Excel
generateAndUploadExcel: async function (worksheetName, headers, rows) { var workbook = new Excel.Workbook(); var sheet = workbook.addWorksheet(worksheetName); sheet.columns = headers; sheet.addRows(rows); try { var bufferFile = await workbook.xlsx.writeBuffer(); const fileExt = "xlsx"; const aws = new FileUploadService( awsConfig.accessKeyId, awsConfig.secretAccessKey, awsConfig.bucketName ); const upload = await aws.uploadBuffer( "download-center", bufferFile, fileExt, worksheetName ); return upload; } catch (err) { throw new Error(err); } }En primer lugar, convierta la fecha de la base de datos al mismo formato exacto que se usó para crear el encabezado de fecha (clave) para acceder a una columna específica en la hoja de Exceljs y, al agregar la fila, simplemente haga row['date-key']=true or false
Por ejemplo dateheader = { header: "12-15-2021", key: "12-15-2021", width: 10} aquí la clave es 12-15-2021 y la fecha de asistencia de DB es 2021-12-15T19:56:37.984Z , convierta esto a 12-15-2021 y luego simplemente haga
let row={} row['name']=user.name; row['city']=user.city; row[convertedDate]=true; sheet.addRow(row);