DEV Community

Cover image for Gerando Arquivos Excel(XLSX) a Partir do Banco de Dados com Node.js
Antony Souza
Antony Souza

Posted on

Gerando Arquivos Excel(XLSX) a Partir do Banco de Dados com Node.js

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:

  1. Node.js
  2. 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;
}
Enter fullscreen mode Exit fullscreen mode

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 do express
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', 'attachment; filename="dados.xlsx"');
Enter fullscreen mode Exit fullscreen mode

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:

Image description

Definindo Headers

  • O Response utilizado é importado do express

Image description

Planilha gerada após acessar a rota

Image description

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)