Usando Módulos xlsx e csv-parse para Converter Dados de uma Planilha para CSV em uma Aplicação Node.js

A manipulação de dados é uma tarefa comum em muitos aplicativos Node.js. Às vezes, você pode se deparar com a necessidade de converter dados de uma planilha XLSX para o formato CSV. Isso pode ser útil ao trabalhar com dados tabulares em diferentes cenários, como importação, exportação ou análise. Neste artigo, vamos explorar como usar os módulos xlsx e csv-parse para realizar essa tarefa de forma eficiente.

Sobre o módulo csv-parse

O csv-parse é um módulo Node.js que permite analisar e transformar dados CSV em objetos JavaScript. Ele é flexível e poderoso, tornando-o uma escolha ideal para converter dados de uma planilha XLSX para CSV.

Para começar, certifique-se de ter o Node.js instalado em seu sistema. Você pode instalar o módulo csv-parse facilmente usando o npm (Node Package Manager):

npm install csv-parse

Criando um Aplicativo de Conversão XLSX para CSV

Vamos criar um aplicativo simples que lê um arquivo XLSX e converte seus dados para um arquivo CSV. Certifique-se de ter um arquivo XLSX para testar. Para este exemplo, suponha que o nome do arquivo seja exemplo.xlsx.

const fs = require('fs');
const XLSX = require('xlsx');
const parse = require('csv-parse');
const { Transform } = require('stream');

// Ler o arquivo XLSX
const workbook = XLSX.readFile('exemplo.xlsx');

// Selecionar a planilha a ser convertida (use a primeira planilha por padrão)
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];

// Converter a planilha para um objeto JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet);

// Converter o objeto JSON para CSV
const csvData = XLSX.utils.json_to_csv(jsonData, { header: 1 });

// Criar um stream de leitura para o CSV
const readStream = fs.createReadStream(csvData);

// Criar um stream de análise CSV
const csvParser = parse({ delimiter: ',' });

// Transformação para a saída (opcional)
const transformStream = new Transform({
  objectMode: true,
  transform(chunk, encoding, callback) {
    // Modifique os dados conforme necessário
    // Neste exemplo, estamos apenas passando os dados
    this.push(chunk);
    callback();
  },
});

// Criar um stream de gravação para o arquivo CSV de saída
const writeStream = fs.createWriteStream('saida.csv');

// Pipe os streams para executar a conversão
readStream.pipe(csvParser).pipe(transformStream).pipe(writeStream);

// Lidar com eventos de conclusão
writeStream.on('finish', () => {
  console.log('Conversão concluída. Os dados foram salvos em "saida.csv".');
});

// Lidar com erros, se houverem
readStream.on('error', (err) => {
  console.error('Erro ao ler o arquivo XLSX:', err);
});

writeStream.on('error', (err) => {
  console.error('Erro ao escrever o arquivo CSV:', err);
});

Neste exemplo, começamos lendo o arquivo XLSX usando a biblioteca xlsx. Em seguida, selecionamos a planilha desejada e a convertemos para um objeto JSON usando sheet_to_json. Em seguida, usamos a função json_to_csv da mesma biblioteca para converter o JSON em dados CSV.

Depois, criamos uma série de streams para manipular os dados. Um stream de leitura é criado para ler os dados CSV, um stream de análise csv-parse é usado para analisar os dados e, opcionalmente, um stream de transformação pode ser usado para modificar os dados antes de escrevê-los em um arquivo CSV de saída. Finalmente, usamos um stream de gravação para escrever os dados convertidos no arquivo de saída.

Conclusão

O módulo csv-parse é uma ferramenta poderosa para converter dados de uma planilha XLSX para o formato CSV em uma aplicação Node.js. Combinado com outras bibliotecas como xlsx, você pode criar facilmente uma solução eficiente para essa tarefa comum de manipulação de dados. Lembre-se de personalizar o código de acordo com suas necessidades específicas, como manipulação de dados ou lógica de negócios, ao trabalhar com planilhas XLSX para obter os melhores resultados para sua aplicação.

category:

Blog

Tags:

No responses yet

Leave a Reply

Your email address will not be published. Required fields are marked *