Depois de vos dar a conhecer a fantástica classe PHPExcel que nos ajuda a fazer quase tudo o que fazemos com os ficheiros de Excel no Office venho brindar-vos com mais uma funcionalidade desta classe. Vamos ver como podemos ler ficheiros Excel já existentes.
Em jeito também de resposta às imensas perguntas já colocadas anteriormente (obrigado a todos pelo vosso interesse) segue então este exemplo que vos vou explicar passo a passo.
Em primeiro lugar vamos activar os reports de erros (que nos facilita na altura de identificar possíveis erros no nosso código) e carregar a nossa classe PHPExcel para que a possamos usar
1 2 3 4 5 | // activar Error reporting error_reporting(E_ALL); // carregar a classe PHPExcel require_once ‘Classes/PHPExcel.php’; |
De seguida vamos inicializar os objectos para leitura do nosso ficheiro excel (computadores.xls) e vamos abrir o ficheiro em modo de leitura:
1 2 3 4 5 6 | // iniciar o objecto para leitura // definir a abertura do ficheiro em modo só de leitura $objReader = new PHPExcel_Reader_Excel5(); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load(“computadores.xls”); $objPHPExcel->setActiveSheetIndex(0); |
Para terem uma ideia do ficheiro excel para este exemplo aqui fica uma amostra do mesmo (bem simples):
Agora vem a parte mais interessante que é mostrar os dados contidos no nosso ficheiro excel, mas de forma organizada para uma leitura simples. Para isso vamos recorrer a uma tabela, desta forma o resultado será muito semelhante ao que podemos visualizar no nosso ficheiro.
Para apresentarmos os dados de forma correcta temos de fazer a leitura dos mesmos linha a linha e por cada coluna da respectiva linha, ou seja, para a primeira linha vamos ler todas as colunas dessa linha, para a segunda linha lemos todas as colunas dessa linha, e assim sucessivamente.
Este processo requer que usemos dois ciclos (aqui vou usar o ciclo for), um ciclo para navegarmos pelas linhas e outro ciclo para navegarmos pelas colunas das respectivas linhas. Assim sendo temos:
1 2 3 4 5 6 7 8 | // navegar na linha for($linha=2; $linha<=10; $linha++){ ...... // navegar nas colunas da respectiva linha for($coluna=0; $coluna<=2; $coluna++){ ....... } } |
Agora só falta mesmo aceder aos dados do nosso ficheiro excel, e para isso basta-nos a seguinte linha (que deve ser colocada dentro do segundo for):
1 | $objPHPExcel->getActiveSheet()->getCellByColumnAndRow($coluna, $linha)->getValue(); |
Mas se usarmos somente este código para obtermos os dados podemos correr o risco de alguns caracteres especiais saírem com caracteres estranhos, então temos de usar uma função especial do PHP: utf8_decode()
1 | utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($coluna, $linha)->getValue()); |
Desta forma todas as letras com acentos e afins saem certinhas sem problemas. Como devem calcular falta qualquer coisa para que possamos escrever os dados já lidos no browser, isso resolve-se com um echo:
1 | echo utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($coluna, $linha)->getValue()); |
Claro que para que possamos ter uma tabela também temos de escrever a estrutura da tabela no browser em conjunto com os dados que vamos lendo do ficheiro. Sem mais demoras, e para que possam testar, aqui fica o código completo deste exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php // activar Error reporting error_reporting(E_ALL); // carregar a classe PHPExcel require_once ‘Classes/PHPExcel.php’; // iniciar o objecto para leitura // definir a abertura do ficheiro em modo só de leitura $objReader = new PHPExcel_Reader_Excel5(); $objReader->setReadDataOnly(true); $objPHPExcel = $objReader->load(“computadores.xls”); $objPHPExcel->setActiveSheetIndex(0); echo “<table border=’1′>”; // navegar na linha for($linha=2; $linha<=10; $linha++){ echo “<tr>”; // navegar nas colunas da respectiva linha for($coluna=0; $coluna<=2; $coluna++){ if($linha==2){ // escreve o cabeçalho da tabela a bold echo “<th>”.utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($coluna, $linha)->getValue()).“</th>”; }else{ // escreve os dados da tabela echo “<td>”.utf8_decode($objPHPExcel->getActiveSheet()->getCellByColumnAndRow($coluna, $linha)->getValue()).“</td>”; } } echo “</tr>”; } echo “</table>”; ?> |
O resultado da leitura deste ficheiro com a classe PHPExcel será algo deste tipo:
Espero que ajude muitos de vocês e que consigam implementar alguma desta informação nos vossos projectos