(Parte 1) Importando planilhas do Excel para o MySQL usando PHP com PDO

importacao1Olá pessoal, hoje vamos dar sequência na série de artigos sobre PDO mas com um exemplo prático e tenho certeza que muito útil, pelo menos para mim foi. Esse artigo será dividido em 2 partes, na primeira parte será passado uma breve introdução do objetivo, indicação de onde baixar a classe excel_reader2.php e como construir uma classe base abstrata para as importações. Na segunda parte será exibido o script do banco de dados, planilha do excel a ser importada e será construída uma classe específica para essa importação.
 
 Algum tempo atrás um cliente me solicitou uma funcionalidade de importar dados de uma planilha no Excel para um sistema em PHP com MySQL, essa planilha continha mais de 3.000 registros e poderia ser importada várias vezes ao dia, sendo que os registros anteriores deveriam ser excluídos para serem gravados os novos valores. Pesquisei bastante sobre o assunto e achei vários fragmentos de código na internet, um pouquinho de cada coisa juntei tudo e construí uma classe de importação que está em uso até hoje.
 
A idéia é seguir o seguinte fluxo de informação:
 
 
Com o processo de importação passando pelo PHP antes de serem gravados os dados no MySQL poderemos ter um controle maior sobre a validação e formatação dos dados. Mas para podermos usar o PHP nessa tarefa será necessário baixar uma classe específica para esse tipo de importação, é a excel_reader2.php, a partir dela construiremos nossa classe base de importação.
 
Com essa classe excel_reader2.php podemos ter acesso a diretrizes da planilha tais como, quantidade  de linhas e colunas preenchidas (as vezes falha..), além de poder acessar o valor das células em forma de matriz bidimensional, ou seja, valor[linha, coluna].
 
A classe abstrata vai servir como base, terá como objetivo auxiliar as classes descendentes com métodos de validações, formatação, retorno de dados como quantidade de linhas e colunas e 2 métodos abstratos que serão implementados em classes descendentes.
importacaoBase.class.php

Observem que a classe acima apenas instância um objeto Spreadsheet_Excel_Reader(), passando como parâmetro o caminho da planilha, o restante dos métodos são auxiliares e serão herdados pelas classes descendentes evitando replicação de códigos. É importante mencionar que a classe excel_reader2.php infelizmente só aceita planilhas com a extensão (*.xls), realizei alguns testes com extensões (*.xlsx) que são geradas por versões mais recentes do excel e não houve sucesso, por esse motivo existe um atributo $extensao com o valor pré-definido, um método getExtensao() para retornar a extensão do arquivo passado como parâmetro e um método existsExtensao() para verificar se a extensão do arquivo é a mesma do atributo $extensao.
 
Um ponto importante dessa classe é o método insertLog(), ele tem como objetivo gravar detalhes da importação realizada, esses dados serão gravados em uma tabela TAB_IMPORTACAO. Este método recebe 4 parâmetros;
* $user – Usuário logado no sistema que disparou a importação.
* $status – Status final da importação, se todos os registros foram importados é gravado SUCESSO senão é gravado ERRO.
* $tipo – Quando estamos importando diferentes planilhas, podemos identificar nesse campo qual o tipo que está sendo importado.
* $registros – Quantidade total de registros inseridos.
 
Além desses parâmetros mais uma informação é gravada com o atributo $this->msgErro, caso ocorra um erro será gravado a mensagem disparada pelo objeto PDOException. A classe está bem comentada com informações de parâmetros de entrada e saída.
 
Bom pessoal vamos finalizando, conforme o descrito no início do artigo na segunda será finalizado com os scripts do banco de dados, planilha e classe especifica de importação.
 
Até a próxima ….
Post relacionado:  Curiosidades sobre os tipos de dados do MySQL
Tags:,
Show Buttons
Hide Buttons