Pular para conteúdo

CSV - Processamento de Arquivos CSV

O que é este Node?

O CSV é o node responsável por ler, processar e gerar arquivos CSV (Comma-Separated Values) de forma nativa, sem dependências externas.

Por que este Node existe?

CSV é um formato universal para importação/exportação de dados tabulares. O CSV existe para:

  1. Importação de Dados: Ler planilhas e importar para sistema
  2. Exportação: Gerar relatórios em formato CSV
  3. Transformação: Converter entre CSV e JSON
  4. Integração: Trocar dados entre sistemas diferentes

Como funciona internamente?

async executeCSV(data: any, variables: Record<string, any>): Promise<any> {
  try {
    this.logger.log('📊 [CSV] Processing CSV data');

    switch (data.operation) {
      case 'parse':
        const lines = data.csvString.split('\n');
        const headers = lines[0].split(',');
        const rows = lines.slice(1).map(line => {
          const values = line.split(',');
          return headers.reduce((obj, header, index) => {
            obj[header.trim()] = values[index]?.trim();
            return obj;
          }, {});
        });

        return {
          success: true,
          data: rows,
          count: rows.length,
        };

      case 'stringify':
        const csvLines = [data.headers.join(',')];
        data.data.forEach(row => {
          csvLines.push(data.headers.map(header => row[header] || '').join(','));
        });

        return {
          success: true,
          csvString: csvLines.join('\n'),
          rows: data.data.length,
        };

      default:
        throw new Error(`Unknown CSV operation: ${data.operation}`);
    }
  } catch (error) {
    this.logger.error('CSV execution error:', error);
    throw error;
  }
}

Parâmetros

Campo Tipo Obrigatório Descrição
operation string Sim parse/stringify
csvString string Sim* String CSV (*para parse)
data array Sim* Array de objetos (*para stringify)
headers array Sim* Cabeçalhos (*para stringify)
delimiter string Não Delimitador (padrão: ,)

Exemplo: Importar Lista de Clientes

JSON para Importar

{
  "name": "Importar Clientes CSV",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "CSV String",
        "parameters": {
          "variableName": "csvData",
          "value": "nome,email,telefone\nJosé Roberto,jose@exemplo.com,11999999999\nMaria Silva,maria@exemplo.com,11988888888"
        }
      }
    },
    {
      "id": "csv_1",
      "type": "csv",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Parse CSV",
        "parameters": {
          "operation": "parse",
          "csvString": "{{csvData}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Resultado",
        "parameters": {
          "message": "Importados {{count}} clientes do CSV"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "csv_1" },
    { "source": "csv_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Resposta do Node

Parse:

{
  "success": true,
  "data": [
    { "nome": "José Roberto", "email": "jose@exemplo.com", "telefone": "11999999999" },
    { "nome": "Maria Silva", "email": "maria@exemplo.com", "telefone": "11988888888" }
  ],
  "count": 2
}

Stringify:

{
  "success": true,
  "csvString": "nome,email\nJosé Roberto,jose@exemplo.com\nMaria Silva,maria@exemplo.com",
  "rows": 2
}

Boas Práticas

SIM: Validar CSV antes de processar, Tratar vírgulas em valores, Usar encoding UTF-8 ❌ NÃO: Processar CSVs gigantes de uma vez, Ignorar escape de caracteres, Assumir formato

Dicas

💡 Dica 1: Para CSVs com vírgulas nos valores, use aspas: "Nome, Sobrenome",email

💡 Dica 2: Sempre valide se primeira linha são cabeçalhos

💡 Dica 3: Use delimiter customizado para TSV (tab): \t

💡 Dica 4: Processe CSVs grandes em chunks para evitar estouro de memória

Próximos Nodes

GOOGLE_SHEETS - Integração com Google Sheets → EXCEL - Processar arquivos Excel → JSON - Converter entre formatos