Pular para o conteúdo

De uma coluna da planilha para um array em JavaScript, Python ou SQL IN

Como transformar uma coluna colada numa lista JavaScript ou Python, numa cláusula SQL IN ou em CSV, tratando aspas, duplicados, linhas vazias e listas grandes.

Por Felipe YamaokaPublicado em 5 de novembro de 20265 min de leitura

"Consegue ver esses 300 IDs para mim?"

Alguém do atendimento manda uma planilha com uma coluna de IDs de clientes e pergunta quais tiveram pagamento recusado. Ou o time de produto quer saber quais desses e-mails já têm conta. Você precisa dessa coluna dentro de uma consulta ou de um script, e copiar valor por valor com aspas e vírgulas é lento e fácil de errar.

Transformar uma coluna em lista é uma daquelas tarefas pequenas que todo dev faz toda semana. Este guia mostra os formatos que você costuma precisar, os detalhes que estragam o resultado, como aspas, duplicados e quebras de linha, e o que fazer quando a lista é longa.

O que vem quando você copia uma coluna

Quando você copia uma coluna do Excel, do Google Sheets ou do LibreOffice, a área de transferência recebe um valor por linha. Junto vêm alguns detalhes que importam depois:

  • As quebras de linha costumam ser no padrão do Windows (\r\n), mesmo em outros sistemas, e a última linha pode terminar com quebra também.
  • Células vazias viram linhas vazias.
  • Espaços antes ou depois do valor vêm junto, invisíveis na planilha.
  • A formatação se perde: o que aparece na célula, como R$ 1.234,56 ou 05/11/2026, é copiado como texto, e não como o número ou a data por trás.

Uma boa conversão tira os espaços, descarta as linhas vazias e trata \r\n e \n do mesmo jeito, para 1043 e 1043 não virarem dois valores diferentes.

Os formatos que você costuma precisar

Dada esta coluna:

text
SP
RJ
MG
SP
O'Brien

Um array JavaScript ou JSON, com aspas duplas:

js
[
  "SP",
  "RJ",
  "MG",
  "SP",
  "O'Brien"
]

Uma lista Python, indentada com quatro espaços, como recomenda a PEP 8:

python
[
    "SP",
    "RJ",
    "MG",
    "SP",
    "O'Brien"
]

Uma cláusula SQL IN, com aspas simples:

sql
IN ('SP', 'RJ', 'MG', 'SP', 'O''Brien')

Repare no último item. Dentro de uma string SQL, a aspa simples é escrita duas vezes, então O'Brien vira 'O''Brien'. Esquecer disso quebra a consulta ou, se os valores vierem de outra pessoa, abre a porta para SQL injection. Em JSON e JavaScript o risco equivalente é uma aspa dupla dentro do valor, que precisa virar \". Sobrenomes como D'Ávila e nomes de lojas com apóstrofo aparecem mais do que se imagina em cadastros brasileiros.

CSV, numa linha só: SP,RJ,MG,SP,O'Brien.

O conversor Coluna para Array deste site gera todos esses formatos, faz o escape certo das aspas em cada um e mantém tudo no seu navegador, o que importa quando a coluna tem dados de clientes.

Números, aspas e tipos

IDs são uma armadilha clássica. Uma coluna de IDs numéricos pode entrar no SQL sem aspas:

sql
IN (1042, 1043, 1077)

Isso é mais rápido e compara número com número. Mas só tire as aspas quando todos os valores forem mesmo números. CEP, telefone, CPF e CNPJ muitas vezes começam com zero, como 01000-000, e precisam continuar como texto; como número eles perdem os zeros da frente ou nem são aceitos.

O mesmo vale no JavaScript: um ID como 12345678901234567890 é maior do que um número do JavaScript representa com exatidão e deveria continuar como string.

Duplicados, linhas vazias e ordenação

Coluna de verdade vem bagunçada. Antes de usar a lista, decida:

  • Tirar duplicados? Numa cláusula IN, duplicado não faz mal, só polui. Numa lista que você vai contar, muda a resposta. Lembre que [email protected] e [email protected] são textos diferentes, então padronize a caixa antes, se isso importar.
  • Tirar linhas vazias? Quase sempre sim. Uma string vazia em IN ('', ...) raramente quer dizer o que você pretende.
  • Ordenar? Ordenar deixa a lista mais fácil de conferir e comparar. Prefira a ordenação natural, que coloca 9 antes de 10, à ordenação de texto pura, que coloca 10 antes de 9.

Listas longas

Colar 10 valores numa cláusula IN tudo bem. Colar 50 mil é outro problema:

  • Os bancos têm limites. O Oracle aceita no máximo 1.000 expressões numa lista IN, e o SQL Server permite cerca de 2.100 parâmetros por consulta quando a lista é parametrizada.
  • Listas literais grandes são lentas para interpretar, e cada lista diferente vira uma consulta diferente, então o banco não reaproveita o plano.

Para conjuntos grandes, carregue os valores numa tabela temporária e faça join com ela:

sql
CREATE TEMPORARY TABLE ids (id bigint PRIMARY KEY);
-- insira os valores, por exemplo com COPY ou um insert em lote
SELECT o.*
FROM orders o
JOIN ids ON ids.id = o.customer_id;

No PostgreSQL você também pode passar um único parâmetro do tipo array e escrever WHERE customer_id = ANY($1), o que mantém um só plano de execução, não importa quantos valores você mande.

No código da aplicação, use parâmetros

Transformar uma coluna em lista literal é perfeito para consultas pontuais, scripts e depuração. No código da aplicação, valores que vêm de usuários ou de arquivos nunca deveriam ser colados dentro do SQL. Use os parâmetros do driver:

python
cursor.execute(
    "SELECT * FROM customers WHERE state = ANY(%s)",
    (["SP", "RJ", "MG"],),
)

O driver faz todo o escape, e a consulta continua a mesma, sejam quais forem os valores.

Erros comuns

  • Esquecer o escape das aspas dentro dos valores, como O'Brien no SQL.
  • Tirar as aspas de códigos que começam com zero, como CEP e CPF.
  • Deixar espaços no fim, e o mesmo valor aparecer duas vezes.
  • Manter linhas vazias que viram strings vazias.
  • Colar dezenas de milhares de valores num IN em vez de usar uma tabela temporária.
  • Concatenar listas no SQL do código da aplicação em vez de usar parâmetros.

Resumo

Uma coluna de planilha é só um monte de linhas de texto, com espaços, células vazias e quebras de linha do Windows no meio. Limpe tirando espaços e linhas vazias, decida sobre duplicados e ordenação e escolha as aspas certas para o destino: aspas duplas em JavaScript, JSON e Python, aspas simples com apóstrofo dobrado no SQL. Mantenha códigos como texto e troque por uma tabela temporária ou um parâmetro array quando a lista crescer.

Leia também