<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Antony Souza</title>
    <description>The latest articles on DEV Community by Antony Souza (@antony_souza).</description>
    <link>https://dev.to/antony_souza</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2569179%2F7b1fa7ba-4ffd-4584-bf24-cdf720f537ab.jpg</url>
      <title>DEV Community: Antony Souza</title>
      <link>https://dev.to/antony_souza</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/antony_souza"/>
    <language>en</language>
    <item>
      <title>Gerando Arquivos Excel(XLSX) a Partir do Banco de Dados com Node.js</title>
      <dc:creator>Antony Souza</dc:creator>
      <pubDate>Thu, 02 Jan 2025 23:48:48 +0000</pubDate>
      <link>https://dev.to/antony_souza/gerando-arquivos-excelxlsx-a-partir-do-banco-de-dados-com-nodejs-310a</link>
      <guid>https://dev.to/antony_souza/gerando-arquivos-excelxlsx-a-partir-do-banco-de-dados-com-nodejs-310a</guid>
      <description>&lt;p&gt;Olá, pessoal! 👋&lt;/p&gt;

&lt;p&gt;Hoje vou compartilhar uma forma prática e eficiente de gerar arquivos XLSX diretamente com dados do seu banco de dados.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estou utilizando NestJs com MongoDB no exemplo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;p&gt;Antes de começar, certifique-se de ter os seguintes itens instalados:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Biblioteca xlsx (instale usando &lt;code&gt;npm install xlsx&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  O Código
&lt;/h2&gt;

&lt;p&gt;Aqui está a função que transforma seus dados em um arquivo XLSX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  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;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Como Funciona?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Transformação dos Dados:&lt;/strong&gt; A função &lt;code&gt;json_to_sheet&lt;/code&gt; converte os dados do formato JSON para um formato compatível com planilhas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Criação do Workbook:&lt;/strong&gt; Usamos book_new para criar um novo arquivo de planilha.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adicionando a Planilha:&lt;/strong&gt; A função &lt;code&gt;book_append_sheet&lt;/code&gt; insere a planilha com os dados no workbook.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gerando o Arquivo:&lt;/strong&gt; Por fim, usamos &lt;code&gt;write&lt;/code&gt; para gerar o arquivo em formato binário, pronto para ser salvo ou enviado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Próximos Passos
&lt;/h2&gt;

&lt;p&gt;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 &lt;code&gt;generateBufferSheets(data: any[])&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A função irá automaticamente pegar as chaves e valores retornados do banco e gerar uma planilha com eles. Simples assim!&lt;/p&gt;

&lt;h2&gt;
  
  
  Enviando o Arquivo para o Cliente
&lt;/h2&gt;

&lt;p&gt;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:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;Response&lt;/code&gt; utilizado é importado do &lt;code&gt;express&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', 'attachment; filename="dados.xlsx"');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Explicando os Headers:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Content-Type:&lt;/strong&gt; Define o tipo de conteúdo como um arquivo XLSX, para que o navegador saiba como tratar o arquivo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content-Disposition:&lt;/strong&gt; 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").&lt;/p&gt;

&lt;h2&gt;
  
  
  Exemplo de uso
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Neste exemplo de uso, vamos retornar todas as vendas de uma loja.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Retornando dados do DB:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0dcgz1tuxgx4irixxma.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0dcgz1tuxgx4irixxma.png" alt="Image description" width="748" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definindo Headers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;Response&lt;/code&gt; utilizado é importado do &lt;code&gt;express&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhunrc9d3bftl3gsjt1ss.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhunrc9d3bftl3gsjt1ss.png" alt="Image description" width="778" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planilha gerada após acessar a rota&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rs43jrefwotsj377rf0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rs43jrefwotsj377rf0.png" alt="Image description" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;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!&lt;/p&gt;

&lt;p&gt;Até a próxima! 👋&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/antony-souza" rel="noopener noreferrer"&gt;https://github.com/antony-souza&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/antony-souza-3990b227b/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/antony-souza-3990b227b/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>xlsx</category>
      <category>nestjs</category>
      <category>mongodb</category>
    </item>
  </channel>
</rss>
