Jump to content
Fórum Script Brasil
  • 0

Excell para o Mysql


MTavares

Question

Salve colegas.

Tenho um projeto do qual o cliente terá que pegar planilhas Excell (.xls) e jogar para o Mysql através do famoso upload de arquivos que o sistema oferece. Até o upload tudo ok, só que não estou conseguindo jogar o Excell para o Mysql, pois nunca fiz isso antes, apenas em txt. Uma parte do ´código segue abaixo:

$diretorio = "cotacao/";
     $arquivos = $diretorio . $_FILES["ImportarCotacao"]["name"];

                 // DEPOIS DE VALIDAR O ARQUIVO FAREI A INSERÇÃO NO BANCO

      if (move_uploaded_file($_FILES["ImportarCotacao"]["tmp_name"], $diretorio . $_FILES["ImportarCotacao"]["name"])) {
          $ler = fopen($arquivos,"r");
          $conteudo = fread($ler,filesize($arquivos));
          $dividir = explode("\n",$conteudo);
                      foreach($dividir as $campos){           
                                // AQUI FAREI A INSERÇÃO NO BANCO 
                  }
Vi na internet que devemos usar o comando abaixo no SQL:
LOAD DATA LOCAL INFILE 'ficheiro.csv' INTO TABLE 'nome_tabela' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (@x, campo1, campo2, campo3);

Esse comando serve também para UPDATE?

Pelo que vi, acho que a mecânica de jogar um txt é diferente de jogar um .xls devido a alguns fatores, dos quais não conheço. Alguém que já tenha passado por essa experiência, poderia me dar uma força?

Obrigado

Edited by MTavares
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Estou caminhando no raciocínio....

Procurei e achei o comando do PHP fgetcsv() http://php.net/manual/pt_BR/function.fgetcsv.php. Porém quando uso o comando abaixo, ele dá um looping infinito. Vejam:

$diretorio = "cotacao/";
     $row = 1;
     $arquivos = $_FILES["ImportarCotacao"]["name"];
     
    //  if (move_uploaded_file($_FILES["ImportarCotacao"]["tmp_name"], $diretorio . $_FILES["ImportarCotacao"]["name"])) {
          $ler = fopen($arquivos,"r");
          
          while($data = fgetcsv($arquivos,1000,",") !== false){
                $num = count ($data);
                echo "<p> $num campos na linha $row: <br /></p>\n";
                $row++;
                 for ($c=0; $c < $num; $c++) {
                      echo $data[$c] . "<br />\n";
                 }
 }

O looping consegui resolver, estava pegando da variável errada. É só trocar a linha abaixo:

$arquivos,1000

por ...

$ler,1000

abs

Edited by MTavares
Link to comment
Share on other sites

  • 0

Acho que consegui resolver o problema. Tem um colega nosso norte americano do qual ensina como importarmos planilhas excell (csv) para o mysql. São vídeos no Youtube do qual selecionei e vou disponibilizar abaixo.

Caso alguém passe por esse desafio, abaixo tem a solução:

http://www.youtube.com/watch?v=wfahu3ggy8c...BB401EA1B5A2EBC

Abs.

Link to comment
Share on other sites

  • 0

Ops... só mais um detalhe... na planilha "csv", tenho campos com valores de moeda. Ex: 1,30. Quando tento salvar pelo "OpenOffice", como csv, ele pede para escolher o delimitador e as opções são:

vírgula ( , )

Dois pontos ( : )

Ponto e vírgula ( ; )

{Tabulação}

{Espaço}

Eu não seleciono a vírgula, exatamente por causa do campo moeda, mas quando eu coloco na linha abaixo dois pontos ou ponto e vírgula, não funciona, vejam:

while(($fileop = fgetcsv($ler,1000,";")) !== false){
Estive pensando em colocar {Tabulação} e {Espaço}, porém não sei se comandos ASCII funciona o fgetcsv. Alguém tem alguma idéia? Obrigado. Consegui resolver, o espaço estava colocando errado. Ao salvar meu arquivo como csv, no meu caso, escolhi como delimitador o espaço e no comando abaixo, fiz da seguinte forma:
while(($fileop = fgetcsv($ler,1000," ")) !== false){

Estarei continuando com meus testes e até o momento está funcionando perfeitamente, por isso, peço aos moderadores para não fechar esse tópico por enquanto, combinado?

Obrigado

Edited by MTavares
Link to comment
Share on other sites

  • 0

Voltei.... estou esbarrando em mais um desafio.... O meu cliente irá importar arquivos xls, então preciso converter o arquivo xls para csv, então fiz da seguinte forma:

//$arquivos = $_FILES["ImportarCotacao"]["tmp_name"];

$arquivos = $_FILES["ImportarCotacao"]["name"];
$extensao = pathinfo($arquivos);

if($extensao['extension'] == "xls"){    
  list($arquivo,$extensao) = explode(".",$_FILES["ImportarCotacao"]["name"]);
       $arquivo = $arquivo.".csv";
 }else{
       $arquivo = $arquivos;
}

$ler = fopen($arquivo,"r");

while(($fileop = fgetcsv($ler,1000," ")) !== false){
          if(!empty($fileop[6]) || $fileop[6] != "Agio"){
             echo $fileop[6]."<br>";         
         }
}

Observem que troquei $arquivos = $_FILES["ImportarCotacao"]["tmp_name"] por $arquivos = $_FILES["ImportarCotacao"]["name"];, só que agora está dando loop infinito, mas quando volto ao estado original (ver post anterior), ele funciona perfeitamente.

Alguém teria uma idéia do que pode ser?

Obrigado!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.5k
×
×
  • Create New...