Ir para conteúdo
Fórum Script Brasil
  • 0

Excell para o Mysql


MTavares

Pergunta

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

Editado por MTavares
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 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

Editado por MTavares
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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

Editado por MTavares
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...