O arquivo não está sendo atualizado quando o usuário clica no botão de download.
Olá pessoal, boa noite, como vocês estão?
Estou construindo um serviço web que pode fazer cotações e essas são feitas em uma planilha excel, mas quando eu mudo o produto que eu quero cotar o arquivo só carrega quando o usuário baixar duas vezes, tentei implementar funções assíncronas para fazer o arquivo esperar para que a requisição fosse enviada, mas não funcionou.
Vocês poderiam me ajudar ?
Vou deixar o código abaixo.
Código abaixo trata os dados que quero enviar em um arquivo excel
let run = (structure) => {
async function getTreatDatasFromAPI() {
let structureToExcel = await structure;
await excelPopulate(structureToExcel);
return structureToExcel;
}
let excelPopulate = async (arrayStructureforExcel) => {
return XlsxPopulate.fromBlankAsync().then((workbook) => {
// adiciona uma nova aba na planilha
// let new_sheet = sheet.addSheet("Nova Sheet");
// Nomeia uma aba da planilha como Planilha1
const sheet = workbook.sheet(0);
sheet.name("planilha");
sheet.row(1).cell(1).value("Part Numbers");
sheet.row(1).cell(2).value("Quantidade");
sheet.row(1).cell(3).value("Preços com Fator 3");
// Arrays que recebem posições das celulas no excel
let cellColumnA = [];
let cellColumnB = [];
let cellColumnC = [];
for (let i = 2; i <= arrayStructureforExcel.length + 1; i++) {
cellColumnA.push(`A${i}`);
cellColumnB.push(`B${i}`);
cellColumnC.push(`C${i}`);
}
sum = 0;
for (let i = 0; i < cellColumnA.length; i++) {
sheet.cell(cellColumnA[i]).value(arrayStructureforExcel[i].PartNumber);
sheet.cell(cellColumnB[i]).value(arrayStructureforExcel[i].Qtd);
sheet.cell(cellColumnC[i]).value(arrayStructureforExcel[i].Preco);
sheet
.row(cellColumnC.length + 2)
.cell(3)
.value("Total: " + (sum += arrayStructureforExcel[i].Preco));
}
// console.log(
// sheet.cell(cellColumnB[i]).value(arrayStructureforExcel[i].Qtd)
// );
// return workbook;
// Salva o arquivo pelo backend direto
return workbook.toFileAsync("StructureAndPrizes.xlsx");
});
};
getTreatDatasFromAPI();
};
Código abaixo envia o arquivo que preciso atualizar antes de mandar para o usuario
const getAll = async (req, res, next) => {
try {
const workbook = await XlsxPopulate.fromFileAsync(
"StructureAndPrizes.xlsx"
);
// console.log(workbook);
// Realizar edições no workbook, se necessário.
// workbook.sheet(0).cell("A1").value("foo");
const data = await workbook.outputAsync();
// Definir o nome do arquivo de saída.
await res.attachment("pivot.xlsx");
// Enviar o workbook como resposta.
await res.send(data);
} catch (error) {
next(error);
}
};