Leitura de uma Planilha Excel com SC5

(dmcsystem) #1

Olá Galera, Belza?
Estou precisando dar carga numa tabela, a partir de uma planilha Excel! Eu gostaria de saber se alguém de vocês já passaram por esta necessidade? E que pudessem dar um Help! Desde já ficaria muito agradecido!

Daniel M Carniero

(Antonio Jr.) #2

Daniel,

Cara! Quase consegui, o problema é na hora do SC entender o SQL para leitura de dados contidos na planilha. Os passos que fiz:

  1. Instalei o AccessDatabaseEngine.exe para Office 2010 (encontrado no site da microsoft), pois minha máquina não tinha os drives de ODBC atualizados necessários;

  2. Adicionei uma Fonte de Dados de Sistema para o Microsoft Excel Driver (*.xls) pelo Administrador de ODBC;

  3. Cada planilha do arquivo .xls é considerado uma tabela e a primeira linha o nome dos campos, então;

  4. A parte do quase: para fazer select na planilha é necessário colocar o nome dela entre colchetes e com $ no final e o SC e PHP entendem que ali entrarão variáveis e dá erro na geração.

(Agostinho) #3

Procure por uma bilbioteca chamada excel_reader.php, coloque ela em uma pasta Excel por exemplo dentro de seu projeto, o arquivo vc pode importar ele usando Documento(nome do arquivo) e depois tente o codigo abaixo:

require_once “…/Excel/excel_reader.php”;
$file = $this->Ini->path_doc.’/’.{planilha};
$data = new Spreadsheet_Excel_Reader($file);
$totalLinhas = $data->rowcount();
$totalColunas= $data->colcount();
for ($i = 1; $i <= 1000; $i++){
if ($data->val($i,1,0) == “”) {
break;
}
$coluna1 = trim($data->val($i,1,0));
$coluna2 = $data->val($i,2,0);
$coluna3 = $data->val($i,3,0);
$coluna4 = $data->val($i,4,0);
$coluna5 = $data->val($i,5,0);
$coluna6 = $data->val($i,6,0);
$coluna7 = $data->val($i,7,0);
$coluna8 = $data->val($i,8,0);
$coluna9 = $data->val($i,9,0);
$coluna10 = $data->val($i,10,0);
$coluna11 = $data->val($i,11,0);
$coluna12 = $data->val($i,12,0);
$coluna13 = $data->val($i,13,0);
$coluna14 = $data->val($i,14,0);
}

espero ter te ajudado.
Agostinho

(dmcsystem) #4

Olá Agostinho!

Muito obrigado pela ajuda!

Como essa planilha vai ser alimentada pelo usuário, O Sistema nunca saberia quantas linhas teria a planilha! Então Eu implementei a seguinte linha:

for( $i=5; $i <= $data->rowcount($sheet_index=0); $i++ )

Começei a ler a partir da Linha 5 devido que a mesma tem um Cabeçalho, até o final!

Olha valeu mesmo pela dica!

Atenciosamente;

Daniel M Carneiro

(Haroldo) #5

Sugestão:
usando com o sc, utilizem a macro:
sc_include_lib(“Lib1”, “Lib2”, …)
Esta macro é usada para selecionar dinamicamente as bibliotecas da aplicação.

Bibliotecas PHP
Bibliotecas JavaScript
fpdf Jquery
fpdf_html jquery_thickbox
excel jquery_blockui
rtf tiny_mce
Ex. 1:

sc_include_lib (“fpdf”);

$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont(‘Arial’,‘B’,16);
$pdf->Cell(40,10,‘Saida de texto!’);
$pdf->Output();

(Agostinho) #6

Obrigado pela dica Harold…

(dmcsystem) #7

Olá Haroldo e Agostinho, Boa tarde!

Obrigado pelas dicas até o momento! Mas estou precisando de outro Help! É o seguinte:

$file = $this->Ini->path_doc.’/’.{planilha}; // esta linha de instrução pega uma planilha previamente vinda de um campo tipo Imagem->Nome de Arquivo de uma Aplicação tipo controle, depois envio via sc_redir() para uma outra aplicação do Blank! Bom é o seguinte: Na minha máquina funciona uma maravilha! Mas na hora que publiquei no servidor do cliente, Ele dá uma mensagem de Permissão! Portanto dá um pau, e não continua! Na aplicação blank Eu tenho o seguinte código no

Evento OnExecute:

error_reporting(E_ALL ^ E_NOTICE);

require_once “…/excel/excel_reader2.php”;

$file = $this->Ini->path_doc."/".[planinha] // planilha recebo da outra aplicação

$data = new Spreadsheet_Excel_Reader($file);

echo “

Planilha de Comissões

”;
echo “
”;

echo "




";

$conta=0;

for( $i=5; $i <= $data->rowcount($sheet_index=0); $i++ )
{
if(trim($data->val($i,5)) !=’’)
{
$contrato = trim($data->val($i,7));

$pagamento     = trim($data->val($i,5));
$dtpag         = explode("/",$pagamento);
$pagamento     = $dtpag[1] .'/'. $dtpag[0] .'/'. $dtpag[2];

$operacao      = trim($data->val($i,4));
$dtoper        = explode("/",$operacao);
$operacao      = $dtoper[1] .'/'. $dtoper[0] .'/'. $dtoper[2];
 
$percentual    = (float) $data->val($i,10);

$valorcomissao = $data->val($i,11);
$aux           = explode(" ",$valorcomissao);
$aux           = (float) $aux[2];

echo "<tr><td>".$data->val($i,1)."</td><td>".$data->val($i,2)."</td><td>".$data->val($i,7)."</td></tr>";

}

sc_lookup(ds,“SELECT contrato FROM contrato WHERE trim(contrato)=’$contrato’”);

if(!empty({ds}))
{
if($pagamento !=’’)
{
sc_exec_sql(“UPDATE contrato SET valorcomissao=$aux,
percentualcomissao=$percentual,
datapgcomissao=’$pagamento’,
dataoperacao=’$operacao’,
status = ‘A Pagar’
WHERE
trim(contrato)=’$contrato’”);

   $conta+=1;
}     

}
}

echo “

Agente Nome do Cliente Contrato
”;
echo “
”;
echo "Total de Registros da Tabela…: " . $data->rowcount($sheet_index=0) . “
”;
echo "Total de Registros Processados: " . $conta . “
”;

// final do Código

Ele não deixa escrever na pasta : /scriptcase/file/img
Troquei as permissões da Pasta para Escrita e meso assim continua o problema!

Gostaria de saber se vocês tem alguma dica para me passar!

Desde já Obrigado!

Daniel M Carniero

(Agostinho) #8

Bom Dia, tente dar permissão na pasta /scriptcase/file toda, se for no linux use chmod -R 777 /scriptcase/file e dai tente novamente…