Apesar de hoje existirem diversas formas de geração dinâmica de arquivos, ainda há casos em que precisamos enviá-los de forma rápida, para outras pessoas, sem correr o risco de gerar a incompatibilidade de formato.
Tudo bem que hoje temos XML para conversar entre servidores e trafegar informações. Mas pense em precisar enviar para o seu chefe (que não manja nada de informática, claro), um relatorio com as vendas do mês. Ele provavelmente conhece o Excel. Nada mais prático então, do que gerar para ele uma planilha do excel, dinâmica, onde ele mesmo pode clicar no link e gerar, tendo informações atualizadas todo o tempo.
É baseado neste cenário, que trabalharemos a seguir.
Crie a base de dados chamada vendas (ou utilize a sua, efetuando as modificações correspondentes) de acordo com o modelo abaixo:
CREATE TABLE `vendas`
(`numerodopedido` INT( 3 ) UNSIGNED ZEROFILL NOT NULL ,
`vendedor` VARCHAR( 255 ) NOT NULL ,
`produto` VARCHAR( 255 ) NOT NULL ,
`precoproduto` DECIMAL( 10, 2 ) NOT NULL ,
`datadavenda` DATETIME NOT NULL ) ENGINE = MYISAM ;
De posse da tabela de uso, vamos inserir alguns registros (caso você ainda não os tenha):
INSERT INTO `vendas` ( `numerodopedido` , `vendedor` , `produto` , `precoproduto` , `datadavenda` ) VALUES ( '009', 'João da Silva', 'Microprocessador Pentium 4', '145.50', '2007-03-29 14:05:20' ), ( '010', 'Maria de Souza', 'Placa mãe Asus', '420.00', '2007-03-29 14:05:47' );
Agora que temos a base de dados e alguns dados a mostrar, vamos ver o que fazer com eles, para que seu chefe fique contente.
Criando o arquivo geraplanilha.php
Este arquivo conterá basicamente, tudo o que você precisa para: conectar-se ao banco, ler as informações presentes no mesmo, gerar o XLS e posteriormente gerar o arquivo para download.
Primeiro passo - Criando a conexão com o banco de dados:
<?php
define(db_host, "localhost");
define(db_user, "plugmasters");
define(db_pass, "senha");
define(db_link, mysql_connect(db_host,db_user,db_pass));
define(db_name, "banco_plugmasters");
mysql_select_db(db_name);
Segundo passo - Trazendo as informações da tabela vendas:
$select = "SELECT * FROM vendas ORDER BY datadavenda DESC";
$export = mysql_query($select);
// aqui pego a quantidade de campos existentes na tabela, afim de formar a planilha
$fields = mysql_num_fields($export);
Terceiro passo - Recuperando os nomes dos campos. Eles também serão os nomes dos campos da planilha:
for ($i = 0; $i < $fields; $i++) {
$header .= mysql_field_name($export, $i) . " ";
}
Quarto passo - Trazendo as informações encontradas em cada linha de registro do banco:
while($row = mysql_fetch_row($export)) {
$line = '';
foreach($row as $value) {
if ((!isset($value)) OR ($value == "")) {
$value = " ";
} else {
$value = str_replace('"', '""', $value);
$value = '"' . $value . '"' . " ";
}
$line .= $value;
}
// o trim retira os espaços encontrados no começo e no final de cada linha encontrada.
$dados .= trim($line)." ";
}
// substituindo todas as quebras de linha ao final de cada registro, que por padrão seria por uma valor em branco, para que a formatação fique legível
$dados= str_replace(" ","",$dados);
Quinto passo - Tratamento básico de erro:
// Caso não encontre nenhum registro, mostra esta mensagem.
if ($dados== "") {
$dados = " Nenhum registro encontrado! ";
}
Último passo - Cabeçalhos e instruções para geração e download do arquivo:
header("Content-type: application/octet-stream");
// este cabeçalho abaixo, indica que o arquivo deverá ser gerado para download (parâmetro attachment) e o nome dele será o contido dentro do parâmetro filename.
header("Content-Disposition: attachment; filename=relatorio_vendas_plugmasters.xls");
// No cache, ou seja, não guarda cache, pois é gerado dinamicamente
header("Pragma: no-cache");
// Não expira
header("Expires: 0");
// E aqui geramos o arquivo com os dados mencionados acima!
print "$header $dados";
?>
Para ver o script deste arquivo em funcionamento, clique aqui .