Olá, pessoal! 👋
Hoje vou compartilhar uma forma prática e eficiente de gerar arquivos XLSX diretamente com dados do seu banco de dados.
- Estou utilizando NestJs com MongoDB no exemplo.
Pré-requisitos
Antes de começar, certifique-se de ter os seguintes itens instalados:
- Node.js
- Biblioteca xlsx (instale usando
npm install xlsx
)
O Código
Aqui está a função que transforma seus dados em um arquivo XLSX:
import xlsx from 'xlsx' ou import * as xlsx from 'xlsx';
generateBufferSheets(data: any[]) {
// Converte os dados JSON em uma planilha
const convertedToBinaryBuffer = xlsx.utils.json_to_sheet(data);
// Cria um novo workbook (livro de planilhas)
const newBook = xlsx.utils.book_new();
// Adiciona a planilha ao workbook
xlsx.utils.book_append_sheet(newBook, convertedToBinaryBuffer, 'Sheets');
// Gera o arquivo XLSX em formato binário
const binarySheets = xlsx.write(newBook, {
type: 'buffer',
bookType: 'xlsx',
});
// Retorna o buffer para salvar ou enviar como resposta
return binarySheets;
}
Como Funciona?
Transformação dos Dados: A função json_to_sheet
converte os dados do formato JSON para um formato compatível com planilhas.
Criação do Workbook: Usamos book_new para criar um novo arquivo de planilha.
Adicionando a Planilha: A função book_append_sheet
insere a planilha com os dados no workbook.
Gerando o Arquivo: Por fim, usamos write
para gerar o arquivo em formato binário, pronto para ser salvo ou enviado.
Próximos Passos
Agora que você já tem a função para gerar o arquivo XLSX, o próximo passo é conectar ao seu banco de dados e obter os dados que você deseja exportar. Esses dados devem ser passados como parâmetro para a função generateBufferSheets(data: any[])
.
A função irá automaticamente pegar as chaves e valores retornados do banco e gerar uma planilha com eles. Simples assim!
Enviando o Arquivo para o Cliente
Para garantir que o navegador do cliente entenda que ele deve baixar o arquivo gerado como um arquivo XLSX, é necessário configurar os headers corretamente na resposta da API. Isso pode ser feito com o seguinte código:
- O
Response
utilizado é importado doexpress
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', 'attachment; filename="dados.xlsx"');
Explicando os Headers:
Content-Type: Define o tipo de conteúdo como um arquivo XLSX, para que o navegador saiba como tratar o arquivo.
Content-Disposition: Define que o arquivo será enviado como um anexo para download. Você também pode especificar o nome do arquivo, como no exemplo acima (filename="dados.xlsx").
Exemplo de uso
- Neste exemplo de uso, vamos retornar todas as vendas de uma loja.
Retornando dados do DB:
Definindo Headers
- O
Response
utilizado é importado doexpress
Planilha gerada após acessar a rota
Conclusão
Com esses exemplos, agora você sabe como gerar arquivos XLSX a partir do seu banco de dados e permitir que os usuários façam o download diretamente no navegador. Se você tiver dúvidas ou sugestões, deixe nos comentários!
Até a próxima! 👋
GitHub: https://github.com/antony-souza
LinkedIn: https://www.linkedin.com/in/antony-souza-3990b227b/
Top comments (0)