Por Pedro Peixoto para o PPLWARE A extracção para Excel é uma funcionalidade essencial nas aplicações WEB, uma vez que permite que um dado conjunto de dados seja exportado e posteriormente manipulado de uma forma mais adequada às necessidades individuais de cada utilizador. Existem já muitas soluções disponíveis, algumas gratuitas, que podem ser usadas, de modo a poupar o trabalho ao programador. Mas será que, precisamos de centenas de linhas de código para fazer uma tarefa destas? Não, hoje, damos continuidade ao último artigo (ver aqui), onde falámos sobre headers e vamos aprender como é possível, em três linhas de código, disponibilizar uma extracção de uma página HTML para Excel.
Em primeiro lugar vamos criar uma página simples com uma tabela para usarmos como exemplo.
Construímos um array de clientes.
<?php
//os clientes poderiam ser lidos de uma base de dados, neste caso vamos escrever manualmente
$clientes[1]=array('nome'=>'António Fialho','telefone'=>'982367832','email'=>'afialho@email.pt');
$clientes[2]=array('nome'=>'David Garcia','telefone'=>'982365645','email'=>'dgarcia@email.pt');
$clientes[3]=array('nome'=>'Ernesto Jorge','telefone'=>'985672462','email'=>'ernesto@email.pt');
?>
Para simplificar a leitura tenho por hábito alternar as cores das tabelas pelo que necessitamos de dois estilos:
Falta agora fazer o código que desenha a tabela:
Nome do cliente | Telefone | |
---|---|---|
' . $cliente['nome'] . ' | ' . $cliente['telefone'] . ' | ' . $cliente['email'] . ' |
E temos finalmente a nossa tabela:
<a href="?export=excel">Exportar esta tabela para excel</a>
O link para exportar aponta para a própria página, apenas adicionei uma variável GET “export” com o valor “excel”. Desta forma quando o link for clicado a página será recarregada mas a variável $_GET[‘export’] vai ter o valor “excel”.
Por último, e mais importante, temos que fazer uma verificação no início do ficheiro, se a variável $_GET[‘export’] for “excel” adicionamos os headers que permitem ao browser interpretar a página como um ficheiro excel:
if ($_GET['export']=='excel')
{
header("Content-Type: application/vnd.ms-excel");
header("Expires: 0");
header("Content-Disposition: attachment; filename=exportacao.xls");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
}
Depois de clicar no link, é gerado o ficheiro Excel:
Como verificamos, o ficheiro foi gerado correctamente, podemos apenas fazer uma melhoria: quando exportamos para Excel não escrever o link final. Para isso vamos substituir código html do link pelo código PHP:
Exportar esta tabela para excel';
?>
Temos finalmente o nosso script pronto.
'António Fialho','telefone'=>'982367832','email'=>'afialho@email.pt');
$clientes[2]=array('nome'=>'David Garcia','telefone'=>'982365645','email'=>'dgarcia@email.pt');
$clientes[3]=array('nome'=>'Ernesto Jorge','telefone'=>'985672462','email'=>'ernesto@email.pt');
?>
Extracção Excel
Nome do cliente | Telefone | |
---|---|---|
' . $cliente['nome'] . ' | ' . $cliente['telefone'] . ' | ' . $cliente['email'] . ' |
Foi difícil? Confuso? Em casos simples como este, é fácil adicionar esta funcionalidade à aplicação sem grandes complicações nem “ficheiros feitos”. No próximo artigo vou explicar como fazer um sistema simples de downloads.