planilha

Node.js exportar dados para planilha xlxs

Introdução

Salvar dados em planilha do Excel, ou em formato Csv pode ser útil para que seu usuário consiga manipular os dados do sistema, pois há usuários que sabem mexer bem no excel e com isso consegue tirar diversas informações a partir desses dados.

Normalmente os sistemas tem os relatórios próprios, mas acabam também dando a oportunidade do usuário exportar esses dados.

Em alguns casos, um determinado relatório pode ser demorado para fazer, e uma solução prévia pode ser gerar uma planilha com os dados para que o usuário consiga montar o relatório como ele deseja, até que o relatório seja implementado no sistema.

Biblioteca

A biblioteca que será utilizada para gerar a planilha a partir do node será a excel4node.

É uma biblioteca bem estável e para o exemplo será utilizada a versão 1.7.2, seu repositório no npm está contando com quase 50 mil de downloads semanais.

Para instalar a biblioteca no projeto, utilizar o comando:

npm i excel4node

Exemplo prático

Para o exemplo prático, será utilizado um array de objetos, onde cada objeto ficará em uma linha da planilha.

No computador, crie um diretório e abra ele com o seu editor de código preferido, no meu caso o Visual Studio Code.

Para iniciar o projeto node, abra o terminal (pode ser o integrado com o editor), navegue até a pasta do projeto e digite o comando:

npm init -y

Isso fará com que crie o package.json no projeto.

Também no terminal, digite o comando de instalação da biblioteca:

npm i excel4node

Dentro do projeto, crie um arquivo server.js. Esse arquivo conterá todo o código da aplicação. A estrutura dos arquivos deve ficar assim:

planilha 1

Abra o arquivo server.js, primeiramente será necessário importar a biblioteca, criar um novo objeto para manipular a planilha, que no caso será chamado de workbook, e depois dar um nome para a planilha, as 3 primeiras linhas do arquivo ficarão assim:

const xl = require('excel4node');
const wb = new xl.Workbook();
const ws = wb.addWorksheet('Worksheet Name');

Posterior a isso, será necessário criar uma variável, que terá os dados que serão colocados na planilha, para os testes, colocaremos 2 objetos:

const data = [
 {
    "name":"Teste",
    "email":"teste@gmail.com",
    "cellphone":"1234567890"
 },
 {
    "name":"Pessoa 2",
    "email":"pessoa@gmail.com",
    "cellphone":"1234567899"
 }
];

Agora é preciso criar um outro array, que vai ter o nome das colunas da planilha:

const headingColumnNames = [
    "Nome",
    "Email",
    "Celular",
]

Certo, com os dados preparados, agora irá começar a lógica para salvar isso no arquivo xlxs.

Primeiramente será adicionado no arquivo todos os títulos das colunas, que está na variável headingColumnNames. Para isso, será percorrido esse array e em cada posição será adicionado uma célula.

let headingColumnIndex = 1; //diz que começará na primeira linha
headingColumnNames.forEach(heading => { //passa por todos itens do array
    // cria uma célula do tipo string para cada título
    ws.cell(1, headingColumnIndex++).string(heading);
});

Depois de colocado os títulos das colunas, agora é necessário inserir os dados, como a coluna já está na primeira linha, os dados serão inseridos a partir da segunda.

Para percorrer os dados, primeiramente será necessário um forEach para passar pelo array, e para cada item, será percorrido todos os valores dentro dele para colocar os dados de cada coluna, será utilizado o Object.keys, que pega a chave de cada item do objeto, percorre por elas e adiciona as células:

let rowIndex = 2; //começa na linha 2
data.forEach(record => { //passa por cada item do data
    let columnIndex = 1; //diz para começar na primeira coluna
    //transforma cada objeto em um array onde cada posição contém as chaves do objeto (name, email, cellphone)
    Object.keys(record).forEach(columnName =>{
        //cria uma coluna do tipo string para cada item
        ws.cell(rowIndex,columnIndex++)
            .string(record [columnName])
    });
    rowIndex++; //incrementa o contador para ir para a próxima linha
}); 

E para finalizar o arquivo server.js basta escolher um nome para o arquivo:

wb.write('ArquivoExcel.xlsx');

Pronto, o arquivo server.js está finalizado, ele por completo fica dessa forma:

const xl = require('excel4node');
const wb = new xl.Workbook();
const ws = wb.addWorksheet('Worksheet Name');

const data = [
 {
    "name":"Teste",
    "email":"teste@gmail.com",
    "cellphone":"1234567890"
 },
 {
    "name":"Pessoa 2",
    "email":"pessoa@gmail.com",
    "cellphone":"1234567899"
 }
]

const headingColumnNames = [
    "Nome",
    "Email",
    "Celular",
]

let headingColumnIndex = 1; //diz que começará na primeira linha
headingColumnNames.forEach(heading => { //passa por todos itens do array
    // cria uma célula do tipo string para cada título
    ws.cell(1, headingColumnIndex++).string(heading);
});

let rowIndex = 2;
data.forEach( record => {
    let columnIndex = 1;
    Object.keys(record).forEach(columnName =>{
        ws.cell(rowIndex,columnIndex++)
            .string(record [columnName])
    });
    rowIndex++;
}); 


wb.write('ArquivoExcel.xlsx');

Para executar isso, volte no terminal e rode o comando

node server.js

O arquivo server.js será executado e irá gerar um arquivo no diretório raiz do projeto, abra ele com qualquer leitor de xlxs e terá o seguinte conteúdo:

Vídeo completo

Caso queira, gravei um vídeo mostrando como exportar os dados do node para uma planilha:

Conclusão

Há algumas formas de colocar dados do Node.js dentro de uma planilha, essa é uma forma delas, essa forma pode ser útil principalmente porque os dados retornados de um banco são json, então por isso, caso precise colocar esses dados em uma planilha, este artigo pode ser útil, até o próximo post 🙂

Código fonte

Todo o código fonte dos exemplos mostrados estão no meu CodeSandbox

Para ver outros canais onde o posto conteúdo, meu Github e também cursos, veja os Links do Programando Soluções.

Referências

https://www.npmjs.com/package/excel4node

https://dev.to/shadabshaikh0/how-to-save-json-data-in-excel-file-in-node-js-1cfn

Este conteúdo te ajudou de alguma forma?

Usamos cookies para lhe proporcionar a melhor experiência possível no nosso site. Ao continuar a usar este site, você concorda com o uso de cookies.
Ok
Privacy Policy