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 ferramentaPrepare 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étodo | Bom para | Cuidado com |
|---|---|---|
| SQL gerado (esta página) | Até dezenas de milhares de linhas, qualquer banco, script que dá para revisar | Arquivos muito grandes geram scripts muito grandes |
| Assistente de Importação e Exportação do SQL Server | Importações frequentes no SQL Server | Ler .xlsx exige o Microsoft Access Database Engine; as versões de 32 bits e 64 bits precisam combinar |
| Importar Arquivo Simples do SSMS | CSV para o SQL Server | Confira os tipos sugeridos antes de concluir |
| BULK INSERT (SQL Server), LOAD DATA (MySQL), COPY (PostgreSQL) | Milhões de linhas a partir de CSV | Permissão de acesso ao arquivo no servidor, opções de separador e codificação |
| Table Data Import Wizard do MySQL Workbench | CSV ou JSON para o MySQL | Lento com arquivos grandes |
| Import/Export do pgAdmin | CSV para uma tabela PostgreSQL que já existe | A tabela precisa existir antes |
| Comando .import do shell sqlite3 (modo csv) | CSV para o SQLite | As 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 coluna | SQL Server | MySQL | PostgreSQL | SQLite |
|---|---|---|---|---|
| Números inteiros | INT ou BIGINT | INT ou BIGINT | INTEGER ou BIGINT | INTEGER |
| Decimais | DECIMAL(p, s) | DECIMAL(p, s) | NUMERIC(p, s) | REAL |
| verdadeiro ou falso | BIT | TINYINT(1) | BOOLEAN | INTEGER |
| Datas | DATE | DATE | DATE | TEXT |
| Data e hora | DATETIME2 | DATETIME | TIMESTAMP | TEXT |
| Texto, códigos com zeros à esquerda | NVARCHAR(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.