Jump to content
Luckshor

Converter Excel para INSERT SQL

Recommended Posts

Olá pessoal, tudo bem?
 

Sou iniciante no MySQL, essa semana veio uma dúvida de 10 milhões de dólares.

 

O Chefinho querido me entregou uma planilha excel com 554 mil registros e me pediu para inserir isso na tabela para fazer levantamento de algumas informações.

Aiiii me vêm aquele dúvida...

 

Fazer 554 mil INSERT INTO (') ???

 

INSERT INTO `tab_teste_cliente` (`id_cliente`, `cnpj`, `razao_social`) VALUES ('NULL,'12345678901234','Empresa Linda');

Massssss... quando eu exporto uma tabela no MySQL, ele faz aqueles inserts com 200 valores.

Isso torna o INSERT mais rápido é melhor certo?

Então há alguma forma de converter o Excel para um arquivo SQL com esses Inserts múltiplos e facilitar minha vida?  

Algum site, script, gambiarra, subterfúgio técnico ou contato divino para fazer isso?

 

 

Obrigado, pela ajuda pessoal até mais!

Share this post


Link to post
Share on other sites

Luckshor

A pergunta inicial é, você esta apenas utilizando EXCEL e o Banco De Dados MySQL?

 

Existem muitos meios de se trabalhar com as informações, basta você ter em mãos as ferramentas necessárias, dito isso, o meio que eu recomendaria você a fazer este processo é,  transformar a planilha do EXCEL em um formato popular do próprio EXCEL que é o formato CSV opção SALVAR COMO TEM ESSE FORMATO, que nada mais é do que uma planilha que pode ser lida por qualquer interpretador de texto, como o próprio NOTEPAD, ele separa as colunas da tabela do excel por(PONTO E VIRGULA).

 

Por exemplo.

PLANILHA SALDO

COLUNAS Nome          Saldo                Data                  ValorDeclarado          Bloqueio De Saldo

LINHAS     Jose            R$ 1.500,00     15/08/2019    R$ 275,00                     Não

LINHAS     Maria          R$ 10.000,00   01/08/2019    R$ 750.000,00              Sim

 

Planilha acima em formato CSV ficaria

Jose;R$ 1.500,00;15/08/2019;R$ 275,00;Não

Maria;R$ 10.000,00;01/08/2019;R$ 750.000,00;Sim

 

Com esse formato você pode LER pelo comando do PHP abaixo:

 

<?php
$csv = file('teste.csv');
foreach ($csv as $row => $line) {
    $row++;
    $column = str_getcsv($line, ';');
    $sql = "INSERT INTO NOME_TABELA (NomeColunaTabela1, NomeColunaTabela2, NomeColunaTabela3, NomeColunaTabela4)
                             VALUES ('".$column[0]."', '".$column[1]."', '".$column[2]."', '".$column[3]."')";
    $insert = mysql_query($sql);
}
?>

O que o comando acima faz? Simples ele LÊ TODAS AS LINHAS do seu arquivo CSV, uma por uma, para cada linha lida ele monta o INSERT, lembrando que se você tem uma planilha com 50 colunas, você precisa colocar a COLUMN do valor 0 (ZERO) até o valor 49, por exemplo.

 

Pronto, feito isso, a cada INSERT INTO montado, você faz o INSERT na tabela.

 

Se você precisar de uma ajuda por não saber nada de PHP manda um salve que faço um tutorial completo para você fazer isso sem precisar INSTALAR nada na máquina, apenas baixando um "servidor portatil" e os arquivos do PHP para você executar, vou precisar apenas da quantidade de colunas que você tem na planilha.

 

Se a minha resposta for útil não esqueça de agradecer e votar positivo.

Espero ter ajudado de alguma forma.

 

Att
Felipe Guedes Coutinho

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Murilo Corrêa
      Bom dia Senhores, 
       
      Estou com um dificuldade, onde precisava que minha consulta trouxesse apenas a menor data para cada produto. 
       
      Faço o cruzamento entre 3 tabelas. Segue 2 Selects que tentei, porém está trazendo todas as datas (termino_digitacao) de cada item.
       
      Tentativa 1: 
       
      select concat(prd.cod_produto, prd.digito) as Cod_Delage, prd.descricao as Descricao, p.termino_digitacao as Entrada, p.cod_pedido as Pedido from pedido p (NOLOCK) inner join pedido_item pedi (NOLOCK) on p.cod_pedido= pedi.cod_pedido inner join produto prd (NOLOCK) on pedi.cod_produto= prd.cod_produto where p.operacao=2 and p.termino_digitacao=(select Min(pe.termino_digitacao) FROM pedido pe WHERE pe.cod_pedido=p.cod_pedido GROUP BY cod_pedido) GROUP by prd.cod_produto,prd.digito, prd.descricao, p.termino_digitacao, p.cod_pedido ORDER BY Cod_Delage  
      Tentativa 2: 
       
      select concat(prd.cod_produto, prd.digito) as Cod_Delage, prd.descricao as Descricao, p.termino_digitacao as Entrada, p.cod_pedido as Pedido from (select cod_pedido, MIN(termino_digitacao) as entrada from pedido (NOLOCK) group by cod_pedido) pe inner join pedido p (NOLOCK) on pe.cod_pedido= p.cod_pedido and pe.cod_pedido=p.cod_pedido and pe.entrada= p.termino_digitacao inner join pedido_item pedi (NOLOCK) on p.cod_pedido= pedi.cod_pedido inner join produto prd (NOLOCK) on pedi.cod_produto= prd.cod_produto where p.operacao=2 GROUP by prd.cod_produto,prd.digito, prd.descricao, p.termino_digitacao, p.cod_pedido ORDER BY p.termino_digitacao asc
       
       
      OBS: Ambas estão trazendo as mesmas informações kkk. 
    • By martinsfm
      Boa Noite senhores(as), tenho uma missão na minha empresa e estou sem saída ainda no momento.
      A TI disponibilizou alguns endereços para criação no WordPress, bom com isso tenho que fazer que uma planilha que fica na rede apareça nessa pagina e se atualize a cada X seg/min bom até ai entendi, tudo certo. Porem a questão é como vou colocar uma planilha que está na rede interna dentro da pagina. Não consigo pensar em nada sem ter que ficar fazendo Upload, preciso de algo automático, o arquivo deve ser carregado constantemente.
      Qualquer dica será bem vinda!
      Desde de já agradeço a atenção de todos.
       
      att,
      Fabrício Martins

    • By gabyin
      estou fazendo uma lista de exercícios para a escola, mas não consigo resolver esse erro, alguém pode me ajudar?
       

    • By Salvatore
      Então, eu estou gravando uns dados no bancos de dados usando text area, mas quando eu dou espaço ou algo do tipo fica assim
       
      Ex :aaaa\r\naaaaaa\r\n
       
      onde esses \r\n são espaços e outras coisas, e ficam sendo exibidos quando eles retorna para a pagina
      alguém sabe como resolvo isso?
    • By drx
      Olá pessoal!
      Estou com um probleminha aqui. Estou me embrenhando pelos ajax e jquery. Muito interessante. 
      Eu peguei um exemplo e é bem simples. Só que não retorna a mensagem para a div.
       
      Eu tenho uma div em pagina1.php onde o usuário entra com um número identificador em um campo textfield.
      Após entrar com o número identificador, solicito a verificação em uma outra página.php onde tenho uma consulta no mysql.
      O echo da consulta é: Existente ou Inexistente. A consulta é feita pelo número identificador. Fiz a verificação e retorna perfeitamente,
      Porém eu quero que ao verificar, a mensagem retorne para minha outra div logo abaixo na pagina1.php
      Vou passar o código para facilitar....
       
      <html>
      <head>
       
      <script src="js/jquery.js"></script>
      <script>
      $(function(){
        $('#form').submit(function(){
           $.ajax({
             url: 'x_consultar_patro.php',
             type: 'POST',
             data: $('#form').serialize(),
             success:function ( data ) {
                 if (data != '') {
                     $('#frm_cadastro').html( data );
                 }
               }
             });
           return false;
         });
      });
      </script>
       
      </head>
       
      <body>

      <div id="frm_cadastro"></div>

      <form id="form" method="post" action="">
        <input type="text" name="codpatro" id="codpatro"/>
        <input type="submit" name="btn_procurar" id="btn_procurar" value="Procurar"/>
      </form>
       
      </body>
      <html>
       
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.