DEV Community

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

Posted on

3 1

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/

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs