Criar Planilha Excel XLS via PHP

A vida de programador não é fácil, as vezes ns damos de frente com diversos tipos de problemas.
Dias atrás estava desenvolvendo um script para imobiliária e surgiu a idéia de criar uma opção de exportar toda a base de dados para o Excel, depois de queimar alguns neurônios consegui e é tão fácil que pasmo. Segue um exemplo simples sem usar banco de dados, leia os comentários para tirar dúvidas:

Salve como exp_xls.php

<?php
//Aqui  no primeiro header definimos o tipo do arquivo
header('Content-type: application/msexcel');
//Neste header definimos como será gravado e o nome do arquivo
header('Content-Disposition: attachment; filename="produtos.xls"');
//Criamos uma tabela em HTML normal
echo "<table>";
echo "<tr>";
echo "<td>Produto</td>";
echo "<td>Valor</td>";
echo "</tr>";
echo "<tr>";
echo "<td>Notebook</td>";
echo "<td>R$1250,00</td>";
echo "</tr>";
echo "</table>";
?>

Somente estas linhas é o suficiente para gerar uma planilha no Excel, caso queira com formatação é só definir estilos para a tabela, utilize também tags HTML como <b></b> ou <i></i> ou <u></u>, é só usar a criatividade.

Para gerar a planilha a partir de uma consulta SQL é fácil também, vejamos:

Suponhamos que você tenha uma tabela em seu BD chamada PRODUTOS desta forma:


| ID | PRODUTO | VALOR  |
| 1   | DVD           | R$ 15,00 |
| 2   | CDR           | R$ 1,80   |
| 3   | CDRW       | R$ 2,80   |

Salve como exp_xlsBD.php

<?php

//Fazemos a conexão com o mysql, coloque os dados de acesso do seu servidor

$mysql_servidor="localhost";/*Seu servidor MYSQL*/
$mysql_usuario="root";/*Usuario de acesso ao MYSQL*/
$mysql_senha="*******";/*Senha de acesso ao MYSQL*/
$mysql_database="teste";/*Nome do banco de dados*/
mysql_connect($mysql_servidor,$mysql_usuario,$mysql_senha) or die(mysql_error());
mysql_select_db($mysql_database) or die(mysql_error());

//Fazemos uma consulta no banco


$sql = "select * from produtos";
//Executamos a query
$query = mysql_query($sql) or die(mysql_error());
//Verificamos se retornou algum valor
if(mysql_num_rows($query)==0){
echo "<h2>Nenhum produto cadastrado</h2>";
}
else{
//Caso retornar algum valor então criamos a tabela HTML e inserimos os dados
//Cabeçalho a tabela
$html = "";
$html .= "<table border='01' padding='01px'>";
$html .= "<tr style='font-weight:bold;'>";
$html .= "<td>ID</td>";
$html.= "<td>PRODUTO</td>";
$html .= "<td>VALOR</td>";
$html .= "</tr>";

//Atribuindo os resultados em um array
while($resultados = mysql_fetch_array($query){
$id = $resultados["id"];
$produto = $resultados["produto"];
$valor = $resultados["valor"];

//Criamos as linhas restantes da tabela com os valores das variáveis
$html.= "<tr style='background:#F0F0F0;height:20px;'>";
$html.= "<td>$id</td>";
$html.= "<td>$produto</td>";
$html.= "<td>$valor</td>";
$html.= "</tr>";
//Fechamos o laço while
}
//Fechamos a tabela
echo "</table>";

//Criamos os headers para forçar o download do arquivo
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header("Content-type: application/msexcel");
}
header("Content-Disposition: attachment; filename=produtos.xls");
echo $html;
}
mysql_close();
?>
Assim você fez uma consulta no BD, atribuiu os valores retornados à variáveis e populou uma tabela HTML, modificou o tipo de arquivo para XLS e forçou o download do mesmo. Aproveitei para inserir algums estilos na tabela só para exemplo. Espero que consigam fazer.