PHP – Como exportar dados do MySQL para o Excel (*.XLS)

10 Comentários

Olá pessoal, como vão?

Hoje vamos aprender a selecionar dados de uma tabela e exportar para Excel (*.xls), recurso bastante útil para relatórios, informativos e etc..

Bom, como um digno #soudev que sou, rs, o recheio da minha tabela será os nomes de nossos amigos desenvolvedores, e além de ser utilizada para o exemplo, no final do post, ao clicar no link para o algoritmo entrar em ação você vai ganhar uma planilha com nomes e os respectivos perfis no twitter para você seguir!

Aqui tenho minha tabela:
A lógica do algoritmo será em basicamente executar uma query no banco, trazer os dados, inserir em um array e forçar o download. Simples né?
Vou explicar separadamente parte por parte e no final disponibilizo o algoritmo inteiro, ok?

Parte 1:
Realizamos uma query no banco, e no caso como quero todos os dados da tabela não será preciso impor condições na query.
A variável ‘$contar’ usarei para contar todas as linhas retornadas da consulta, por meio da função mysql_num_rows(), utilizaremos mais pra frente!

Parte 2:
Agora faremos um loop, usando um for para criar o cabeçalho da nossa planilha, utilizará a posição [0] do array ‘$html’.

Parte 3:
Nesta parte, vamos trazer os dados do banco em forma de array, utilizando a função mysql_fetch_array() como normalmente fazemos, as únicas diferenças são que: logo no início eu declaro que minha variável ‘$i’ agora vale 1, pois este será o ponteiro para indicar em que posição do array ‘$html’ eu vou inserir as tabelas HTML, e como no loop anterior eu coloquei o cabeçalho na posição [0], agora preciso inserir os dados da posição [1] em diante..
Seguindo então a execução do algoritmo:
Meu ‘$i’ vale 1 e enquanto houver dados vindos do banco, a minha variável ‘$retorno_nome’ corresponderá a posição [‘nome’] e ‘$retorno_twitter’ a posição [‘twitter’] dentro do array (trata-se de arrays associativos). Na sequência alimento a tabela com as variáveis ‘$retorno_nome’ e ‘$retorno_twitter’ dentro do array ‘$html’ na posição correspondente ao valor atual da variável ‘$i’, ao final disso somo 1 a nossa tão útil variável ‘$i’.

Parte 4:
Bom, nesta altura já temos todos os dados do banco dentro do nosso array ‘$html’, prontos para usarmos.
Agora vamos informar ao php qual será o nome do nosso .XLS, para isso criamos a variável $arquivo que receberá este nome.

Parte 5:
Em seguida iremos passar parâmetros a função header() que irá, na ordem:
Determinar até quando este arquivo ficará em cache;
Indicar a data de última modificação;
Indicar que o arquivo não deverá ficar no cache, forçando o seu reprocessamento.
Mudar o tipo do arquivo;
Forçar o download, informando o nome do arquivo, no nosso caso será a variável ‘$arquivo’.

Parte 6:
E por final, realizo outro loop para imprimir este array no nosso arquivo XLS, nesta altura já posso substituir o valor do nosso ponteiro ‘$i’, pois não irá afetar em nada.
Lembra-se que no ínicio, declarei uma variável ‘$contar’? (Caso não lembre, veja lá em cima), bom nesta variável temos o valor de todas as linhas retornadas da consulta, sendo assim informo pro meu loop até onde ele deve parar, e escrevo cada posição do array.

Feito, ao acessar esta página você receberá o arquivo XLS, sem nenhuma página sendo exibida, ou seja, este algoritmo deverá ser a página link de por exemplo, um botão de exportar dados.
Existem diversas maneiras de exportarmos dados de um banco para XLS, CSV e esta é uma delas, espero que tenham entendido e gostado, caso exista dúvidas fiquem a vontade em perguntar.

Clique aqui para visualizar o arquivo XLS gerado com este exemplo.

E abaixo segue o algoritmo completo:

Forte Abraço!
E vamos lá, amanhã Brasil 4 x 0 Portugal, rs.