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

Jean Matos

  • Expert
  • *****
  • Mensagens: 987
    • Gestão de Construtoras
    • Email
importar registros de uma planilha excell
« Online: Fevereiro 13, 2014, 06:16:18 pm »
Prezados, como faço para importar dados de uma planilha excell no SC ?
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Haroldo

  • Expert
  • *****
  • Mensagens: 7553
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
Re:importar registros de uma planilha excell
« Responder #1 Online: Fevereiro 14, 2014, 10:42:23 am »
salva ela como csv.

com fopen eh tranquilo a importação.

Jean Matos

  • Expert
  • *****
  • Mensagens: 987
    • Gestão de Construtoras
    • Email
Re:importar registros de uma planilha excell
« Responder #2 Online: Fevereiro 16, 2014, 04:11:17 pm »
Ok...tem como me passar um tuto de responsa...
só to achando coisa tosca na net...
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

Kleyber

  • Expert
  • *****
  • Mensagens: 2913
    • TK Informídia
Re:importar registros de uma planilha excell
« Responder #3 Online: Fevereiro 16, 2014, 04:38:54 pm »
Jean,

1 - Cria uma app Controle;
2 - Crie um campo com o nome ARQUIVO, por exemplo. Ele deve ser um campo do tipo DOCUMENTO (NOME DE ARQUIVO);
3 - No evento OnValidate coloque o teu código. Posto o que fiz aqui pra importar uma planilha Excel, pra te servir de exemplo.

Código: [Selecionar]
// Pegando o arquivo com caminho
$caminho = $this->Ini->path_doc;
$arq = $caminho.'/'.{arquivo};

// Processando a leitura
$fp = fopen($arq,'r');

// Pegando a primeira linha (cabeçalho)
$linha = fgets($fp);

// Pegando o caracter separador na coluna 12
$caracter = substr($linha,12,1);

// Processando arquivo
while ($dados = fgetcsv($fp, filesize($arq), $caracter)) 
    $tabela[] = $dados;
 
fclose($fp);

$insert_sql = 'INSERT INTO tab_lojas ('
             .'nome_loj,endereco,bairro,cidade,uf_loja,cep,fone,fax,email,'
         .'gerente,dat_inicial,situacao,dat_inativa,codempresa) VALUES';

foreach ($tabela as $campo)
{
  if (empty($campo[1])) {
     break;
  }
  $check_sql = 'SELECT * FROM tab_lojas '
             . ' WHERE nome_loj = "'.$campo[0].' - '.$campo[1].'"';
  sc_select(dataset, $check_sql);
  if (false == {dataset})     // Error while accessing database
  {
     sc_error_message('Erro durante acesso ao TAB_LOJAS.');
  }
  elseif (!{dataset}->EOF)   // Existe na tabela
  {
     continue;
  }
  elseif ({dataset}->EOF)   // Não existe na tabela
  {
     $nome_loj = $campo[0]." - ".$campo[1];
     $endereco = '';
     $bairro = '';
     $cidade = $campo[3];
     $uf_loja = $campo[2];
     $cep = '';
     $fone = '';
     $fax = '';
     $email = '';
     $gerente = '';
     $dat_inicial = '0000-00-00';
     $situacao = 0;
     $dat_inativa = '0000-00-00';
$cod_empresa = 1;

    // Monta a parte de inserção dos campos
     $insert_sql2 = " ('".$nome_loj."','".$endereco."','".$bairro."','".$cidade."','".$uf_loja."','".$cep."',";
     $insert_sql2 .= "'".$fone."','".$fax."','".$email."','".$gerente."','".$dat_inicial."',".$situacao.",";
     $insert_sql2 .= "'".$dat_inativa."',".$cod_empresa."),";
     $insert_sql .= $insert_sql2;
  }
}
if (empty($insert_sql2)) {
   sc_error_message("Não há registros a atualizar, verifique");
}
else {
// Tira o último caractere (vírgula extra)
   $insert_sql = substr($insert_sql, 0, -1);

// Inserir registros
   sc_exec_sql($insert_sql);

// Pega o número de registros inseridos
   $cadastrados = mysql_affected_rows();
   sc_error_message("Lojas cadastradas: " . $cadastrados);
}

Espero ter ajudado.
Kleyber Derick

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

Jean Matos

  • Expert
  • *****
  • Mensagens: 987
    • Gestão de Construtoras
    • Email
Re:importar registros de uma planilha excell
« Responder #4 Online: Fevereiro 16, 2014, 04:46:43 pm »
Obrigado Kleyber..vou implementar aqui..
V8.1, V9
Windows Server 2012 Enterpriser 64 bits
SqlServer 2012 datacenter 64 bits
Sistema Integrado de Gestão de Construtoras WaveTOR - Sistema Integrado de Gestão de Construtoras
Teófilo Otoni - MG
(33)8824-2775

adrianacombat

  • Avançado
  • ****
  • Mensagens: 328
    • Email
Re:importar registros de uma planilha excell
« Responder #5 Online: Março 28, 2014, 10:34:21 am »
Kleyber,

Este exemplo serve para importar arquivos xml?
Estou precisando importar um arquivo xml de um sistema que emite exames ECG.

Aguardo retorno e obrigada.

Kleyber

  • Expert
  • *****
  • Mensagens: 2913
    • TK Informídia
Re:importar registros de uma planilha excell
« Responder #6 Online: Março 28, 2014, 03:39:13 pm »
Adriana,

Creio que não, pois um arquivo XML teria que ser lido pelas tags. Veja este link aqui, talvez dê uma clareada ao que queres fazer:
http://blog.clares.com.br/ler-xml-com-php/

Abraços,
Kleyber Derick

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

Thiago Martos

  • Iniciante
  • **
  • Mensagens: 70
  • Only god knows how this code works
    • TM SOLUÇÕES
    • Email
Re:importar registros de uma planilha excell
« Responder #7 Online: Março 13, 2015, 12:07:59 pm »
Boa tarde!

Kleyber, obrigado pelo código, me serviu perfeitamente, apenas fiz algumas alterações para o usuário poder informar quais campos ele quer importar de acordo com o CSV.

Vou disponibilizar o código e uma print caso alguém precise futuramente.

No OnValidate ficou o código abaixo:
Código: [Selecionar]
if({arquivo} == ''){
sc_error_message('Arquivo não selecionado');
}else{

// Pegando o arquivo com caminho
$caminho = $this->Ini->path_doc;
$arq = $caminho.'/'.{arquivo};


// Processando a leitura
$fp = fopen($arq,'r');


// CABECALHO
$cabecalho = fgets($fp);
$cabecalho = substr($cabecalho, 0, -2); // remove caracteres especiais finais


// Processando arquivo
while ($dados_csv = fgetcsv($fp, filesize($arq))){
$dados[] = $dados_csv;
}
fclose($fp);


//VALIDA CAMPOS FORMULARIO X CSV
$_cab_explode = explode(';', $cabecalho);

if(!in_array({cabecalho1},$_cab_explode)){
sc_error_message('Cabeçalho 1 não existe no arquivo CSV');
}if(!in_array({cabecalho2},$_cab_explode) && {cabecalho2} != "") {
sc_error_message('Cabeçalho 2 não existe no arquivo CSV');
}if(!in_array({cabecalho3},$_cab_explode) && {cabecalho3} != ""){
sc_error_message('Cabeçalho 3 não existe no arquivo CSV');
}if(!in_array({cabecalho4},$_cab_explode) && {cabecalho4} != ""){
sc_error_message('Cabeçalho 4 não existe no arquivo CSV');
}if(!in_array({cabecalho5},$_cab_explode) && {cabecalho5} != ""){
sc_error_message('Cabeçalho 5 não existe no arquivo CSV');
}


//INSERÇÃO
//campos
$_sql_insert_cab = "INSERT INTO clientes( ";
$_sql_insert_cab .= '`'.{campo1}.'`,';
if({cabecalho2} != '') $_sql_insert_cab .= '`'.{campo2}.'`,';
if({cabecalho3} != '') $_sql_insert_cab .= '`'.{campo3}.'`,';
if({cabecalho4} != '') $_sql_insert_cab .= '`'.{campo4}.'`,';
if({cabecalho5} != '') $_sql_insert_cab .= '`'.{campo5}.'`,';

$_sql_insert_cab = substr($_sql_insert_cab, 0, -1);
$_sql_insert_cab .= " )";

//valores
$_sql_insert_campos = "VALUES";
foreach ($dados as $linha){ // percorre linhas
$_linha = str_replace(";", "','", $linha[0]);
$_sql_insert_campos .= "('".$_linha."'),";
}
$_sql_insert_campos = substr($_sql_insert_campos, 0, -1); //remove ultima virgula

//sql final
$_sql_insert = $_sql_insert_cab.$_sql_insert_campos;


// Inserir registros
sc_exec_sql($_sql_insert);


// Pega o número de registros inseridos
$importados = mysql_affected_rows();
$msg = "Registros importados: ".$importados;
sc_alert($msg);

}
Print: http://imgur.com/3sZV1RF


Espero que sirva para ajudar alguém algum dia.

Att.
Desenvolvimento de APIs, extensões e sistemas robustos
Skype: thiago.martos
E-mail: thiago@thiagomartos.com
www.tmsolucoes.net

Kleyber

  • Expert
  • *****
  • Mensagens: 2913
    • TK Informídia
Re:importar registros de uma planilha excell
« Responder #8 Online: Março 13, 2015, 02:16:36 pm »
Muito bom Thiago. Obrigado por compartilhar.
Kleyber Derick

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

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

  • Expert
  • *****
  • Mensagens: 506
    • RC Sistemas Soluções Informáticas
    • Email
Re:importar registros de uma planilha excell
« Responder #9 Online: Março 23, 2015, 03:10:03 pm »
Meus Caros,

Estou fazendo um rotina de importação de dados com base numa planilha excell, fiz algo parecido com que foi sugerido aqui neste tópico, porém estou com problemas quando o nome do cliente possui acentuação, dá erro no insert.

1366: Incorrect string value: '\xDADIA C...' for column 'Nome' at row 1
      ADOConnection._Execute(INSERT INTO clientes( `Nome`,`CelDDD`,`CelNum` )VALUES('CLAÚDIA CORREIA DA SILVA','81','83024923'), false) % line 1085, file: adodb.inc.php
   ADOConnection.Execute(INSERT INTO clientes( `Nome`,`CelDDD`,`CelNum` )VALUES('CLAÚDIA CORREIA DA SILVA','81','83024923')) % line 1762, file: control_importa_clientes_apl.php
control_importa_clientes_apl.Valida_campos(null, null, null) % line 1058, file: control_importa_clientes_apl.php
control_importa_clientes_apl.controle() % line 1620, file: index.php

Minha base e tabela estão configurados para UTF-8.

Quando executo o insert diretamente no gerenciador do mysql o comando não da erro, mas via SC dá esse erro acima, me parece que eu tenho que tratar isso, mas não me lembro como resolver, alguém pode me dar a dica por favor ????
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Kleyber

  • Expert
  • *****
  • Mensagens: 2913
    • TK Informídia
Re:importar registros de uma planilha excell
« Responder #10 Online: Março 24, 2015, 07:48:53 am »
Ronaldo bom dia,

Que tipo de conexão estás usando com o MySQL? PDO ou Transactional? Se for PDO, experimente mudar para Transactional.
Kleyber Derick

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

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

  • Expert
  • *****
  • Mensagens: 506
    • RC Sistemas Soluções Informáticas
    • Email
Re:importar registros de uma planilha excell
« Responder #11 Online: Março 24, 2015, 08:08:31 am »
Kelyber,

Está configurado com Transacional, eu consegui resolver alterando o charset do arquivo CSV para UTF-8, aí rodou sem problemas.
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Kleyber

  • Expert
  • *****
  • Mensagens: 2913
    • TK Informídia
Re:importar registros de uma planilha excell
« Responder #12 Online: Março 24, 2015, 08:19:55 am »
Ótimo. Que bom que conseguiste resolver.
Kleyber Derick

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

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

  • Expert
  • *****
  • Mensagens: 506
    • RC Sistemas Soluções Informáticas
    • Email
Re:importar registros de uma planilha excell
« Responder #13 Online: Março 24, 2015, 08:22:18 am »
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.
Ronaldo Cocuroci
Analista de Sistemas
RC Sistemas Soluções Informáticas
www.rc-sistemas.com

Celso R.

  • Expert
  • *****
  • Mensagens: 1024
Re:importar registros de uma planilha excell
« Responder #14 Online: Junho 04, 2015, 12:04:44 am »
Caro Ronaldo por um acaso você conseguiu tratar isso via código?
Celso R.
________________________________
SC - V 8