Pplware

PHP é a Quinta-Feira – HEADERs (parte 2)

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:  


		$cliente)
			{
				//o resto da divisão do id por dois vai devolvendo 1 ou 0 conforme numero par ou impar
				//de seguida escrevo os dados do cliente
				echo '
					
				';
			}
		?>
				
	
Nome do clienteTelefoneEmail
' . $cliente['nome'] . '' . $cliente['telefone'] . '' . $cliente['email'] . '

E temos finalmente a nossa tabela:

Neste ponto temos uma página normal com uma tabela. Vamos agora perceber como é fácil adicionar a funcionalidade de extracção utilizando headers. Antes de mais, é necessário um link/botão de exportar para excel:

<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
		
	
	
		
$cliente) { //o resto da divisão do id por dois vai devolvendo 1 ou 0 conforme numeros par ou impar //de seguida escrevo os dados do cliente echo ' '; } ?>
Nome do clienteTelefoneEmail
' . $cliente['nome'] . '' . $cliente['telefone'] . '' . $cliente['email'] . '
Exportar esta tabela para excel'; } ?>

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.

Exit mobile version