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

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • 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 ?
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 6276
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/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: 956
    • 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...
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 2237
    • Email
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
www.tkinformidia.net

Jean Matos

  • Expert
  • *****
  • Mensagens: 956
    • 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..
Sc - 6.xxx , 7.xxx e V8
Windows Server 2008 Enterpriser 64 bits
SqlServer 2008 Express 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: 307
    • 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: 2237
    • Email
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
www.tkinformidia.net

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: 2237
    • Email
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
www.tkinformidia.net

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 #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: 2237
    • Email
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
www.tkinformidia.net

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 #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: 2237
    • Email
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
www.tkinformidia.net

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 #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: 941
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