Então uriel, estou usando node puro e js puro, apenas o express para API no back e a biblioteca Xlsx-populate para tratar os dados e jogar em uma planilha, o dado chega via POST do usuario o back processa, cria uma planilha e manda para o front, vou deixar abaixo um trecho do código que faz isso.
O código abaixo faz todo o tratamento com a planilha antes de enviar
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));
}
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);
Realiza edições no workbook, se necessário.
const data = await workbook.outputAsync();
Define o nome do arquivo de saída.
await res.attachment("pivot.xlsx");
Envia o workbook como resposta.
await res.send(data);
} catch (error) {
next(error);
}
};