Como gerar Excel com o PHP - Parte 1
Diego Pires | 17/04/2008 Nessa série de artigos que estou começando aqui no blog vou apresentar algumas formas de você “exportar” seus relatórios para o formato de planilhas Excel.
Existem diversas formas de gerar uma planilha excel com o PHP e eu vou começar com o mais fácil na parte 1. Vamos criar “na unha”, sem utilizar nenhuma extensão ou biblioteca pronta.
Então vamos lá. É muito mais simples do que imagina.
O primeiro passo de tudo é você escrever o seu relatório no navegador em formato de tabela. Sim, o Excel nada mais é que uma enorme tabela de dados. Então não fique se preocupando com coisas do tipo:
“Ah… mas meu sistema é todo tableless, você quer que eu use tabelas agora?”
Tabelas são feitas para serem usadas para apresentar dados tabulados, portanto, essa é a melhor maneira de se utilizar tabelas: Montar relatórios (que não são nada mais do que dados tabulados).
Portanto, faça seu script apresentar o relatório que necessita em formato de dados tabulados. Vou colocar um exemplo bem simples aqui para ilustrar:
<?php
echo ”
<table>
<tr>
<td>Linha 1 - Coluna 1</td>
<td>Linha 1 - Coluna 2</td>
<td>Linha 1 - Coluna 3</td>
<td>Linha 1 - Coluna 4</td>
<td>Linha 1 - Coluna 5</td>
<td>Linha 1 - Coluna 6</td>
</tr>
<tr>
<td>Linha 2 - Coluna 1</td>
<td>Linha 2 - Coluna 2</td>
<td>Linha 2 - Coluna 3</td>
<td>Linha 2 - Coluna 4</td>
<td>Linha 2 - Coluna 5</td>
<td>Linha 2 - Coluna 6</td>
</tr>
<tr>
<td>Linha 3 - Coluna 1</td>
<td>Linha 3 - Coluna 2</td>
<td>Linha 3 - Coluna 3</td>
<td>Linha 3 - Coluna 4</td>
<td>Linha 3 - Coluna 5</td>
<td>Linha 3- Coluna 6</td>
</tr>
</table>
“;
?>
Digamos portanto que esse seja o seu relatório que deseja transformar em excel. Agora o próximo passo é dizer ao navegador que o que ele leu é um arquivo Excel. Para isso, adicione as seguintes linhas no começo do seu script:
header(”Content-type: application/vnd.ms-excel”);
header(”Content-type: application/force-download”);
header(”Content-Disposition: attachment; filename=relatorio.xls”);
header(”Pragma: no-cache”);
Na terceira linha, onde está “filename=relatorio.xls” é o nome do arquivo que o navegador irá sugerir na hora de informar o download do mesmo. Então seu script ficaria assim:
<?php
header(”Content-type: application/vnd.ms-excel”);
header(”Content-type: application/force-download”);
header(”Content-Disposition: attachment; filename=relatorio.xls”);
header(”Pragma: no-cache”);
echo ”
<table>
<tr>
<td>Linha 1 - Coluna 1</td>
<td>Linha 1 - Coluna 2</td>
<td>Linha 1 - Coluna 3</td>
<td>Linha 1 - Coluna 4</td>
<td>Linha 1 - Coluna 5</td>
<td>Linha 1 - Coluna 6</td>
</tr>
<tr>
<td>Linha 2 - Coluna 1</td>
<td>Linha 2 - Coluna 2</td>
<td>Linha 2 - Coluna 3</td>
<td>Linha 2 - Coluna 4</td>
<td>Linha 2 - Coluna 5</td>
<td>Linha 2 - Coluna 6</td>
</tr>
<tr>
<td>Linha 3 - Coluna 1</td>
<td>Linha 3 - Coluna 2</td>
<td>Linha 3 - Coluna 3</td>
<td>Linha 3 - Coluna 4</td>
<td>Linha 3 - Coluna 5</td>
<td>Linha 3- Coluna 6</td>
</tr>
</table>
“;
?>
E pronto, acabou. Muito simples não é?
Na parte 2 desse artigo irei apresentar algumas classes css para formatar seu arquivo excel e deixar ele mais “apresentável” e também formatar dados como numérico, texto, data, etc.
Espero ter ajudado
Não deixe de ler também:
Se gostou do texto e não quer perder as atualizações, se inscreva no meu feed RSS!







[...] a série que comecei aqui, vamos a parte 2
Como gerar Excel com o PHP - Parte 2 | DiegoPires.net | 15/05/2008[...] a série que comecei aqui, vamos a parte 2 de como gerar planilhas excel com o [...]
Amigo muito show seus arquivo me ajudou de forma objetiva
Filipe Mattos mendes | 06/04/2009Amigo muito show seus arquivo me ajudou de forma objetiva e discreta.
Mais eu tive um problema. Firefox, IE6 o mesmo funciona normalmente já no IE7 ele da erro.
Existe alguma configurações no IE7 para utilizar a rotina acima, ou deveria funcionar normalmente. ??
parabéns pela iniciativa!
vinicius | 17/04/2009parabéns pela iniciativa!
Muito bom o tutorial! Acho que todos precisam de tutoriais simples,
Thiago Schoba | 29/07/2009Muito bom o tutorial!
Acho que todos precisam de tutoriais simples, 100% práticos e úteis!
Abraço!
Muito Bom, mas tipo assim... Como que eu faço para gerar
Mano Jr | 09/11/2009Muito Bom, mas tipo assim…
Como que eu faço para gerar um relatório somente das checkbox selecionadas (Cada checkbox representa uma coluna do DB).
Se poder me ajudar, agradeço desde já.
Pessoal, só uma pequena correção para funcionar também com Internet
Heitor | 10/11/2009Pessoal, só uma pequena correção para funcionar também com Internet Explorer:
header(”Content-Disposition: attachment; filename=’relatorio.xls’”);
>>Notem as aspas simples no nome do arquivo!
Abraço!
Tambpem notei que com o IE, é bom comentar a
Heitor | 10/11/2009Tambpem notei que com o IE, é bom comentar a linha:
header(”Content-type: application/force-download”);
Pois com ela o download acontece, mas dá um alert estranho de erro.
Gostaria de saber se existe alguma forma de abrir um
Alex | 20/12/2009Gostaria de saber se existe alguma forma de abrir um gráfico do Excel na própria página em PHP. Ou seja, realizar uma consulta no BD e a partir deste gerar um gráfico do Excel na página em PHP?
Vocês perceberam que pelo excel 2007 ele mostra a seguinte
Karla Rodrigues | 07/06/2010Vocês perceberam que pelo excel 2007 ele mostra a seguinte mensagem :
“o arquivo que você esta tentando abrir, ‘teste.xls’, está em um formato diferente do especificado pela extensão do arquivo.
Verifique se o arquivo não está corrompido e se é de uma fonte confiável antes de abri-lo. Deseja abrir o arquivo agora?”
Por acaso alguem sabe como retirar esse erro?
Agradeço desde já.
Na realidade já descobri como resolver isso, a boa noticia
Karla Rodrigues | 11/06/2010Na realidade já descobri como resolver isso, a boa noticia que tem solução a ruim que perdemos o style…
Então esse erro esta ocorrendo por causa que a microsoft no excel 2007 não aceita mais o html, mas o interpreta, assim dando aquela mensagem. Para que isso não ocorra mais é necessario realizar a formatação das linhas e colunas com /t e /n, onde o /t é para uma nova coluna e o /n para pular uma linha.
Assim infelismente não podemos mais deixar mais colorido ou com a letra de desejamos, o que é uma pena.
O broffice funciona normamente, assim não havendo a necessidade de mudar para ele.
Att.
Karla Rodrigues
O google docs não consegue reconhecer os arquivos gerados.. alguma
djalma | 15/08/2010O google docs não consegue reconhecer os arquivos gerados.. alguma sugestão?