Autor Tópico: importar registros de uma planilha excell  (Lida 2942 vezes)

R.O.N.A.L.D.O

  • Avançado
  • ****
  • Mensagens: 493
    • RC Sistemas Soluções Informáticas
    • Email
Re:importar registros de uma planilha excell
« Responder #15 Online: Junho 04, 2015, 08:06:35 am »
Celso,

Ainda não meu caro, não encontrei uma solução para tratar isso via código. :(
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:importar registros de uma planilha excell
« Responder #16 Online: Junho 04, 2015, 02:47:41 pm »
Correto.
Fiz os testes aqui em uma planilha pequena funcionou a dica do csv em Utf8 já em uma planilha grande 27000 linhas não vai.
Celso R.
________________________________
SC - V 8

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:importar registros de uma planilha excell
« Responder #17 Online: Junho 04, 2015, 04:15:02 pm »
Foi um paliativo, o ideal é que eu pudesse tratar isso no código e então o sistema aceitar qualquer charset convertendo corretamente para o MySQL com UTF-8.

Já tentou onde tem:

if({cabecalho2} != '') $_sql_insert_cab .= '`'.{campo2}.'`,';

Fazer assim:

if({cabecalho2} != '') $_sql_insert_cab .= '`'.utf8_encode({campo2}).'`,';

Teste com os dois (utf8_encode e utf8_decode)
F. A.
Analista de Sistemas

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:importar registros de uma planilha excell
« Responder #18 Online: Junho 04, 2015, 05:10:37 pm »
Fred sua sugestão funcionou 100% os acentos estão corretos.
Agora estou recebendo esse erro:
Atenção[/t][/t][/t]
PDOStatement::execute(): send of 8192 bytes failed with errno=10053 Uma conexão estabelecida foi anulada pelo software no computador host.
PDOStatement::execute(): MySQL server has gone away
PDOStatement::execute(): Error reading result set's header


[/td][/tr][/table]
Celso R.
________________________________
SC - V 8

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:importar registros de uma planilha excell
« Responder #19 Online: Junho 04, 2015, 06:49:44 pm »
Esse erro da em que momento?

Pelo que vejo é ao ler os dados "já inseridos no banco". Em fim, já adiantando... veja na aplicação o tipo de charset e altere ele. Para Utf8 ou para Latin. Teste com os dois.

Depois mude o tipo de conexão pra "Transitional" no projeto! Faça os testes. Não esquece de explicar em que momento ocorre o erro!
F. A.
Analista de Sistemas

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:importar registros de uma planilha excell
« Responder #20 Online: Junho 04, 2015, 07:24:41 pm »
O erro ocorre quando os dados supostamente estão sendo inseridos no banco de dados. São 27000 registros quando chega em 20000 +- ele dá o erro me parece também que o tempo é longo demais então o Mysql fecha a conexão, não sei se isso existe.
« Última modificação: Junho 04, 2015, 07:33:59 pm por Celso R. »
Celso R.
________________________________
SC - V 8

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:importar registros de uma planilha excell
« Responder #21 Online: Junho 04, 2015, 07:39:42 pm »
Ao analisar melhor percebi que ele vai até a última linha do arquivo csv. E dá o erro.
Celso R.
________________________________
SC - V 8

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:importar registros de uma planilha excell
« Responder #22 Online: Junho 05, 2015, 10:41:02 am »
Olha, essas coisas a gente testa assim:

1) Quando se cria um arquivo de importação o seu código tem que ter a codificação de acordo com o layout a ser importado;
2) É importante que primeiro, teste com 10 registros, esse negócio de 27 mil é pra quando você tiver 100% certeza que esta importando com os 10 ou 100 registros;
3) Se o passo 1 tiver ok, ou seja, se ele importar os primeiros 10 ou 100 registros, ai o próximo passo é verificar se nos dados (nos campos de cada célula do .csv) tem algum tipo de assentos gráficos como ( ', ", ü ) não assentos como ( ~, ^, ´ ) esses passam.
4) Seria interessante você antes de fazer os insert's criar um mecanismo de tratamento;
4.1) Modelo de importação com tratamento:
Código: [Selecionar]
sc_exec_sql("TRUNCATE consciliacao_servidores");

$arq = $this->Ini->path_doc."/".{arquivo};

$f = fopen($arq, 'r');
if ($f) {

    // Ler cabecalho do arquivo
    $cabecalho = fgetcsv($f, 0, ";");


    // Enquanto nao terminar o arquivo
    while (!feof($f)) {

        // Ler uma linha do arquivo
        $linha = fgetcsv($f, 0, ";");
        if (!$linha) {
            continue;

        }

        // Montar registro com valores indexados pelo cabecalho
        $registro = array_combine($cabecalho, $linha);

        // Obtendo o nome
$nom = $registro['NOME'];
$nome = rtrim($nom);
$cpf_serv = $registro['CPF'];
$cpf = str_pad($cpf_serv, 11, "0", STR_PAD_LEFT);
$nat = $registro['NAT'];
        $estado_civil   = $registro['ESTADO CIVIL'];
$identidade = $registro['IDENTIDADE'];
$sexo = $registro['SEXO'];
$ende  = $registro['ENDERECO'];
$ender          = rtrim($ende);
$num = $registro['NRO'];
$numero = rtrim($num);
$endereco = $ender.' - '.$numero;
$cep = $registro['CEP'];
$uf = $registro['UF'];
$bairro = $registro['BAIRRO'];
$complemento = $registro['COMPLEMENTO'];
$cidade = $registro['MUNICIPIO'];
$telefone = $registro['TEL'];
//explode pra tratamento da data nascimento
$nasc = $registro['DATANASC'];
$ex = explode("/",$nasc);

if (count($ex) == 3) {
$nascimento = $ex[2].'-'.$ex[1].'-'.$ex[0];
}else{
$nascimento = '0000-00-00';
}
// ------- FIM ------------------------------
$setor = $registro['SETOR'];
$escolaridade = $registro['ESCOLARIDADE'];
$email = $registro['EMAIL'];

//explode pra tratamento da data de admissao
$data_adm = $registro['DATA_ADM'];
$e = explode("/",$data_adm);

if(count($e)==3){
   $data_bd = $e[2].'-'.$e[1].'-'.$e[0];
}else{
   $data_bd = '0000-00-00';
}
//--------------FIM---------------------------

$cargo = $registro['CARGO'];

//TRATAMENTO PARA O CAMPO VINCULO / SITUACAO
$vinc = $registro['VINCULO'];

switch(trim($vinc)){

case "ATIVO PERMANENTE":
$vinculo = '1';
break;

case "APOSENTADO":
$vinculo = '2';
break;

case "INSTITUIDOR DE PENSAO":
$vinculo = '3';
break;

case "CEDIDO":
$vinculo = '4';
break;

case "PDV":
$vinculo = '5';
break;

default:
$vinculo = 'teste';

}
//-------FIM -----------------------------------
//TRATAMENTO PARA O CAMPO STATUS
$stat = $registro['STATUS'];
if($stat == 'Sim'){
$status = '1';
}else{
$status = '2';
}
//----------FIM--------------------------------

$siape = $registro['SIAPE'];


$sql = "SELECT cpf_cnpj FROM servidores WHERE cpf_cnpj = '$cpf'";
$exe_sql=mysql_query($sql) or die (mysql_error());

$result = "";
while($query = mysql_fetch_array($exe_sql)){

$result = $query['cpf_cnpj'];

}


if($cpf != $result){

sc_exec_sql("INSERT INTO consciliacao_servidores (nome,cpf_cnpj,rg,naturalidade,estado_civil,sexo,cep,endereco,bairro,complemento,cidade,uf,telefone,nascimento,divisao_setor,escolaridade,email,data_admissao,cargo,vinculo,status_servidor,siape) VALUES ('$nome','$cpf','$identidade','$nat','$estado_civil','$sexo','$cep','$endereco','$bairro','$complemento','$cidade','$uf','$telefone','$nascimento','$setor','$escolaridade','$email','$data_bd','$cargo','$vinculo','$status','$siape')");

}

    }
    fclose($f);

sc_redir(container_importacao.php, "_parent");
}

A dica é que comece o seu código pequeno, vá por partes, não queira importar tudo sem testar o máximo de imprevistos que possa ocorrer! E o mais importante é que entenda cada linha de código do arquivo e comente cada função para quando necessitar você entender rápido e desenvolver outro.
F. A.
Analista de Sistemas

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:importar registros de uma planilha excell
« Responder #23 Online: Junho 05, 2015, 03:57:12 pm »
Ao analisar melhor percebi que ele vai até a última linha do arquivo csv. E dá o erro.

Celso,

Pode ser que o loop esteja indo além do último registro do arquivo CSV. Dá uma olhada nesse loop pra ver se ele varre somente a quantidade correta ou se vai mais além. Pode ser por aí o problema.
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

Celso R.

  • Expert
  • *****
  • Mensagens: 941
Re:importar registros de uma planilha excell
« Responder #24 Online: Junho 09, 2015, 11:41:40 pm »
Bom após utilizar a técnica do Fred e analisar mais a fundo meu arquivo CSV que estava com a algumas datas e branco e rever a tabela no que se refere o charset após isso passou a funcionar 100%. Não precisei usar o utf8_decode.
Obrigado a todos pelas respostas que sempre não ajudam.
Celso R.
________________________________
SC - V 8

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:importar registros de uma planilha excell
« Responder #25 Online: Junho 11, 2015, 12:35:00 pm »
Obrigado a todos pelas respostas que sempre não ajudam.

Vou encarar isso como um erro de digitação hehehehe...
F. A.
Analista de Sistemas

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:importar registros de uma planilha excell
« Responder #26 Online: Junho 11, 2015, 04:06:56 pm »
kkkkkkkkkkkkkk verdade Fred!
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

danillo.sdd

  • Novato
  • *
  • Mensagens: 30
    • Email
Re:importar registros de uma planilha excell
« Responder #27 Online: Dezembro 29, 2015, 10:55:52 pm »
Keyber,,

segui o tutorial informado:
mais ao importar ocorre um erro:

pg_query(): Query failed: ERRO: coluna "Nilo;Nilo;chacaradas;porto;RS;94070060;5133274455;5133274456;ff" não existeLINE 1: SELECT * FROM tab_lojas WHERE nome_loj = "Nilo;Nilo;chacara... ^
Erro durante acesso ao TAB_LOJAS.
Não há registros a atualizar, verifique

o meu csv, esta assim:

nome_loj   endereco   bairro   cidade   uf_loja   cep   fone   fax   email   gerente   dat_inicial   situacao   dat_inativa   codempresa
Nilo   Nilo   chacaradas   porto   RS   94070060   5133274455   5133274456   fff@terra.com   1   0000-00-00 00:00:00   0   0000-00-00 00:00:00   1

Kleyber

  • Expert
  • *****
  • Mensagens: 2235
    • Email
Re:importar registros de uma planilha excell
« Responder #28 Online: Dezembro 30, 2015, 08:53:54 am »
Danilo,

Qual separador está sendo usado no teu CSV? No exemplo que passei o separador dos campos é o ;.
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net