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

Kleyber

  • Expert
  • *****
  • Mensagens: 2628
Re:importar registros de uma planilha excell
« Responder #30 Online: Junho 08, 2017, 02:37:29 pm »
Boa tarde,

Podes nos dar maiores detalhes? Como está a estrutura do teu arquivo CSV? Qual erro está aparecendo? Como está a tua rotina de importação?
Kleyber Derick

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

luigisadao

  • Novato
  • *
  • Mensagens: 13
Re:importar registros de uma planilha excell
« Responder #31 Online: Junho 08, 2017, 02:48:09 pm »
Boa tarde.

Eu criei um módulo que importa um arquivo de outro programa para fazer um controle, esse arquivo é em extensão .csv (segue um anexo), preciso somente carregar o banco de dados para depois trabalhar esses lançamentos via grid gerando relatórios.


"Não      MG           PP   15807   26/07/2016 15:15:00   30296808   11/11/2015   3049239      03-74-00480/15   11/11/2015   624,30   11/11/2015      "
"Não      BSB          PP   7794   14/03/2017 14:39:00   32656132   04/01/2016   3528334      SAN 01 RONE COLINAS   04/01/2016   300,00   04/01/2016      "
LSY

Kleyber

  • Expert
  • *****
  • Mensagens: 2628
Re:importar registros de uma planilha excell
« Responder #32 Online: Junho 08, 2017, 02:49:48 pm »
E qual o caracter delimitador dos campos em CSV?
Kleyber Derick

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

luigisadao

  • Novato
  • *
  • Mensagens: 13
Re:importar registros de uma planilha excell
« Responder #33 Online: Junho 08, 2017, 03:01:50 pm »
separado por vírgula.
Sou estudante iniciante.
Montei o script que você apresentou no começo do tópico mas não tenho muito conhecimento de banco de dados.

// 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 14
$caracter = substr($linha,14,1);

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

$insert_sql = 'INSERT INTO relatoriodiario ('
             .'status,bloqueio,dr,tipo_voucher,data_nf_digitalizacao,'
            .'lote,data_lote,an8,arquivo,nota,data_emissao,valor_bruto,data_vencto) VALUES';

foreach ($tabela as $campo)
{
  if (empty($campo[1])) {
     break;
  }
  $check_sql = 'SELECT * FROM relatoriodiario '
             . ' WHERE id = '.$id.'';
  sc_select(dataset, $check_sql);
  if (false == {dataset})     // Error while accessing database
  {
     sc_error_message('Erro durante acesso ao Relatório Diário.');
  }
  elseif (!{dataset}->EOF)   // Existe na tabela
  {
     continue;
  }
  elseif ({dataset}->EOF)   // Não existe na tabela
  {
     $status = '';
     $bloqueio = '';
     $dr = '';
     $tipo_voucher = '';
     $voucher = '';
     $data_nf_digitalizacao = '00-00-0000';
     $lote = '';
     $data_lote = '00-00-0000';
     $an8 = '';
     $arquivo = '';
     $nota = '';
     $data_emissao = '00-00-0000';
     $valor_bruto = '';
    $data_vencto = '00-00-0000';
   
       // Monta a parte de inserção dos campos
     $insert_sql2 = " ('".$status."','".$bloqueio."','".$dr."','".$tipo_voucher."','".$voucher."','".$data_nf_digitalizacao."',";
     $insert_sql2 .= "'".$lote."','".$data_lote."','".$an8."','".$arquivo."','".$nota."',".$data_emissao.",";
     $insert_sql2 .= "'".$valor_bruto."',".$data_vencto."),";
     $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("Relatório Diário: " . $cadastrados);
}

LSY

Kleyber

  • Expert
  • *****
  • Mensagens: 2628
Re:importar registros de uma planilha excell
« Responder #34 Online: Junho 08, 2017, 03:53:18 pm »
Veja se o caracter separador (a virgula no teu caso) está mesmo na posição 14, como definiste aqui:

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

Ou coloque diretamente a virgula nessa variável:

// Pegando o caracter separador
$caracter = ',';
Kleyber Derick

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

luigisadao

  • Novato
  • *
  • Mensagens: 13
Re:importar registros de uma planilha excell
« Responder #35 Online: Junho 09, 2017, 11:11:59 am »
Bom dia.

Solicito auxilio, aonde estou errando?

Veja o erro.

Atenção    
Undefined variable: arquivo
fopen(E:/scriptcase/wwwroot/scriptcase/file/doc/): failed to open stream: No such file or directory
fgets() expects parameter 1 to be resource, boolean given
fgetcsv() expects parameter 1 to be resource, boolean given
fclose() expects parameter 1 to be resource, boolean given
Undefined variable: tabela
Invalid argument supplied for foreach()
Não há registros a atualizar, verifique
LSY

Kleyber

  • Expert
  • *****
  • Mensagens: 2628
Re:importar registros de uma planilha excell
« Responder #36 Online: Junho 09, 2017, 11:24:21 am »
Bom dia,

Verifique se o arquivo CSV está na pasta que estás pegando aqui:

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

Pois a mensagem diz que arquivo não existe nessa pasta.
Kleyber Derick

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

FredKeyster

  • Expert
  • *****
  • Mensagens: 1722
  • DEWENNINMEN
    • Email
Re:importar registros de uma planilha excell
« Responder #37 Online: Junho 18, 2017, 05:29:20 pm »
É bom dar um var_dump nessa variável $arq pra ver como esta o caminho.
F. A.
Analista de Sistemas

Kleyber

  • Expert
  • *****
  • Mensagens: 2628
Re:importar registros de uma planilha excell
« Responder #38 Online: Junho 19, 2017, 08:02:39 am »
Bem lembrado, Fred.
Kleyber Derick

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

Rodrigo Goulart Padovezzi

  • Expert
  • *****
  • Mensagens: 1135
    • Email
Re:importar registros de uma planilha excell
« Responder #39 Online: Junho 19, 2017, 09:36:22 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.
Bom dia, creio que usando a função utf8_encode ou utf8_decode no insert dará certo.