Como importar Excel para um banco de dados

O jeito mais simples de importar Excel para um banco de dados é transformar a planilha em SQL: um comando CREATE TABLE com tipos de coluna adequados e comandos INSERT para as linhas, que você roda no SQL Server Management Studio, no MySQL Workbench, no pgAdmin ou em qualquer cliente. O conversor desta página escreve esse SQL no seu navegador para SQL Server, MySQL, PostgreSQL e SQLite; para milhões de linhas, exporte em CSV e use a carga em massa do próprio banco.

6 min de leitura

A resposta curta

Um banco de dados não consegue ler um arquivo .xlsx sozinho. Alguma coisa precisa ler a planilha, decidir o tipo de cada coluna, criar uma tabela e inserir as linhas. Você pode deixar isso com o assistente de importação do banco, carregar um CSV com um comando de carga em massa ou gerar SQL puro que qualquer cliente de banco de dados consegue rodar.

O SQL gerado é a opção mais portável e a mais fácil de conferir, porque você vê exatamente o que vai ser criado antes de mexer no banco. No conversor abaixo, abra o arquivo .xlsx ou .csv (ou cole células copiadas do Excel), escolha o Banco de dados, digite o Nome da tabela e copie ou baixe o script. Os tipos das colunas são detectados pelos dados, e códigos de barras ou códigos com zeros à esquerda continuam como texto.

Experimente aqui: Excel para SQL

Abrir a página completa da ferramenta

Prepare a planilha primeiro

A maioria das importações que dão errado é culpa da planilha, não do banco. Planilhas são feitas para pessoas; tabelas precisam de um único retângulo limpo de dados. Gaste dois minutos nisso antes de importar qualquer coisa:

  • Exatamente uma linha de cabeçalho, com nomes de coluna únicos. Tire títulos acima da tabela, células de cabeçalho mescladas e segundas linhas de cabeçalho.
  • Uma linha por registro. Apague linhas de total e subtotal, linhas em branco usadas como separador e observações abaixo dos dados.
  • Um tipo de valor por coluna. Uma coluna Preço não deve ter o texto sob consulta em algumas linhas; deixe a célula vazia, que vira NULL.
  • Nada de células mescladas no meio dos dados. Desfaça a mesclagem e repita o valor em todas as linhas a que ele se aplica.
  • Fórmulas não são problema: é usado o último valor calculado salvo no arquivo. Confira se a pasta de trabalho foi recalculada e salva depois da última alteração.
  • Coloque cada tabela na sua própria planilha. Quando a pasta de trabalho tem várias planilhas, o conversor mostra um seletor de Planilha.

Comparação dos métodos

MétodoBom paraCuidado com
SQL gerado (esta página)Até dezenas de milhares de linhas, qualquer banco, script que dá para revisarArquivos muito grandes geram scripts muito grandes
Assistente de Importação e Exportação do SQL ServerImportações frequentes no SQL ServerLer .xlsx exige o Microsoft Access Database Engine; as versões de 32 bits e 64 bits precisam combinar
Importar Arquivo Simples do SSMSCSV para o SQL ServerConfira os tipos sugeridos antes de concluir
BULK INSERT (SQL Server), LOAD DATA (MySQL), COPY (PostgreSQL)Milhões de linhas a partir de CSVPermissão de acesso ao arquivo no servidor, opções de separador e codificação
Table Data Import Wizard do MySQL WorkbenchCSV ou JSON para o MySQLLento com arquivos grandes
Import/Export do pgAdminCSV para uma tabela PostgreSQL que já existeA tabela precisa existir antes
Comando .import do shell sqlite3 (modo csv)CSV para o SQLiteAs colunas são criadas como TEXT, a não ser que a tabela já exista

Passo a passo com SQL gerado

  • Abra o arquivo ou cole as células. A primeira linha vira o nome das colunas; desmarque A primeira linha é o cabeçalho se os seus dados não tiverem cabeçalho.
  • Escolha o Banco de dados: SQL Server, MySQL, PostgreSQL ou SQLite. As aspas, os tipos e o escape dos valores mudam conforme a escolha.
  • Digite o Nome da tabela. Com Simplificar nomes ligado, Nome do Produto vira nome_do_produto, o que poupa você de colocar nomes entre aspas em toda consulta depois.
  • Escolha Linhas por INSERT. 100 é um padrão seguro; lotes maiores importam mais rápido. O SQL Server aceita no máximo 1000 linhas em uma única lista VALUES, então a ferramenta nunca passa disso para o SQL Server.
  • Decida os extras: CREATE TABLE escreve a definição da tabela, Apagar a tabela antes remove uma tabela existente com o mesmo nome (use só em tabelas que você quer mesmo substituir) e Usar transação faz a importação ser tudo ou nada.
  • Copie o SQL ou baixe o arquivo .sql e rode no seu cliente de banco de dados.

Tipos de coluna que o conversor escolhe

Cada coluna recebe o tipo mais estreito que comporta todos os valores dela. Colunas de texto recebem um tamanho arredondado para cima a partir do valor mais longo (por exemplo VARCHAR(50) para um máximo de 37 caracteres), então você ainda pode aumentar depois se precisar.

Dados na colunaSQL ServerMySQLPostgreSQLSQLite
Números inteirosINT ou BIGINTINT ou BIGINTINTEGER ou BIGINTINTEGER
DecimaisDECIMAL(p, s)DECIMAL(p, s)NUMERIC(p, s)REAL
verdadeiro ou falsoBITTINYINT(1)BOOLEANINTEGER
DatasDATEDATEDATETEXT
Data e horaDATETIME2DATETIMETIMESTAMPTEXT
Texto, códigos com zeros à esquerdaNVARCHAR(n)VARCHAR(n)VARCHAR(n)TEXT

Problemas comuns e como evitar

  • Datas chegam como números, tipo 45000. O Excel guarda datas como contagem de dias (45000 é 15 de março de 2023). Quando você lê um .xlsx com o conversor, as células de data voltam a ser datas de verdade; outras ferramentas podem exigir que a coluna esteja formatada como data antes.
  • Zeros à esquerda somem. Códigos de barras, CEPs e códigos de produto como 00123 precisam ser texto. O conversor mantém a coluna como texto quando os valores começam com zero, e números com mais de 15 dígitos também continuam como texto.
  • Letras acentuadas viram ponto de interrogação no SQL Server. Texto Unicode precisa de colunas NVARCHAR e do prefixo N nos textos; o script gerado para o SQL Server usa os dois. No MySQL, use uma tabela utf8mb4.
  • Números com vírgula decimal. Em arquivos CSV separados por ponto e vírgula, que é o padrão do Excel em português, valores como 1.499,90 são lidos como 1499.90. Em arquivos separados por vírgula, a vírgula separa colunas, então esses valores precisam estar entre aspas.
  • Células vazias. Elas viram NULL e a coluna é criada aceitando valores nulos. Se você preferir texto vazio, mude depois da importação.
  • Aspas dentro do texto. Um apóstrofo como em D'Ávila quebraria um INSERT escrito à mão; os valores gerados são escapados, e as barras invertidas do MySQL também.

Quando usar uma carga em massa

Scripts de INSERT são perfeitos para alguns milhares até dezenas de milhares de linhas: dá para ler, guardar no controle de versão e rodar em qualquer lugar. Para centenas de milhares ou milhões de linhas, o script fica enorme e rodar ele é mais lento que uma carga em massa.

Nesse caso, salve a planilha como CSV UTF-8 e use o comando de carga em massa do seu banco: BULK INSERT no SQL Server, LOAD DATA LOCAL INFILE no MySQL, COPY ou o \copy do psql no PostgreSQL. Um meio-termo útil é deixar o conversor escrever só o CREATE TABLE a partir de uma amostra dos dados, para ter tipos de coluna adequados, e depois carregar o CSV completo nessa tabela com o comando de carga em massa.

Passo a passo

  1. Adicione os dadosAbra um arquivo .xlsx ou .csv, ou copie células no Excel e cole na caixa de entrada.
  2. Escolha o banco e a tabelaEscolha SQL Server, MySQL, PostgreSQL ou SQLite em Banco de dados e digite o Nome da tabela.
  3. Ajuste as opçõesEscolha Linhas por INSERT e marque CREATE TABLE, Apagar a tabela antes, Usar transação ou Simplificar nomes conforme precisar.
  4. Confira os tipos das colunasLeia a parte do CREATE TABLE no resultado e confirme que os códigos estão como texto e os números como numéricos.
  5. Rode o SQLCopie o script ou baixe o arquivo .sql e rode no seu cliente de banco de dados.

Perguntas frequentes

Dá para importar um arquivo Excel direto no SQL Server?

Sim, com o Assistente de Importação e Exportação do SQL Server, mas ler .xlsx exige o Microsoft Access Database Engine instalado na máquina. Gerar comandos INSERT evita essa dependência e funciona com qualquer cliente de SQL Server.

Minha planilha é enviada para ser convertida?

Não. O arquivo é lido e o SQL é gerado no seu navegador. Nada vai para um servidor, o que faz diferença em listas de clientes e tabelas de preços.

Quantas linhas dá para importar com comandos INSERT?

Dezenas de milhares de linhas funcionam bem. Para milhões de linhas, use uma carga em massa como BULK INSERT, LOAD DATA ou COPY com um arquivo CSV.

Arquivos .xls antigos são aceitos?

Não. Abra o arquivo no Excel ou no LibreOffice, salve como .xlsx e abra essa cópia. Arquivos CSV também funcionam.

Posso adicionar linhas a uma tabela que já existe?

Sim. Desmarque CREATE TABLE e Apagar a tabela antes, digite o nome da tabela existente e confira se os nomes das colunas batem. Só os comandos INSERT são escritos.

Funciona sem internet?

Sim. Depois que a página foi aberta uma vez, ela continua funcionando sem conexão com a internet.