Estoy tratando de crear una API de descanso que usa una API de una tercera parte para obtener algún estado. Obtendré la URL de un archivo de Excel, para este caso específico, debe ser un archivo de Excel, utilícelos en mi servicio para obtener los datos de la API de la tercera parte y guarde esta respuesta en el mismo archivo de Excel. Ya puedo obtener los datos de la API de la tercera parte, pero no puedo administrar Excel a través de nest js. Traté de usar la biblioteca exceljs pero no funcionó como esperaba. Me gustaría que el retorno (supongamos que está dentro de una función) sea el valor de celda en este archivo de Excel. ¿Alguien podría darme alguna pista sobre cómo manejar el uso de este archivo dentro de nest js?
let Excel = require('exceljs'); let workBook = new Excel.Workbook(); workBook.xlsx.readFile('./ExcelFile/Archive.xlsx').then(function() { let sheet = workBook.getWorkSheet("Sheet1"); let cellValue = sheet.getRow(2).getCell(1).value; }); return cellValue;Dado que cellValue se define dentro de una devolución de llamada ( .then(() => {} ), deberá regresar dentro de la devolución de llamada.
Aquí, sin embargo, se enfrentará al problema de que no puede devolverlo dentro de la devolución de llamada. Para solucionar esto, tiene 2 opciones: usar async/await o devolver una promesa
Asíncrono/espera:
const Excel = require('exceljs'); async function ReadCell(filename) { let workBook = new Excel.Workbook(); await workBook.xlsx.readFile(filename); let sheet = workBook.getWorkSheet('Sheet1'); let cellValue = sheet.getRow(2).getCell(1).value; return cellValue; }Promesas:
const Excel = require('exceljs'); async function ReadCell(filename) { return new Promise((resolve, reject) => { let workBook = new Excel.Workbook(); workBook.xlsx.readFile(filename).then(() => { let sheet = workBook.getWorkSheet('Sheet1'); let cellValue = sheet.getRow(2).getCell(1).value; resolve(cellValue); }).catch(err => /* Do some error handling here if you want to */ reject(err)); }); } Tenga en cuenta que cuando use promesas, necesitará usar .then((result) => {/* your code here */}) cuando intente obtener el resultado de su función ReadCell().
Puedes encontrar más información sobre las promesas aquí