Gerando uma planilha formato XLS com PHP e MySql

Gostaria de me desculpar com a autora, pois quando postei acabei removendo sem intenção a AUTORIA. Mas está agora! 😀

Fonte: Flávia Jobstraibizer www.flaviajobs.com.br

——- >

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 em um relatório de vendas, um cenário muito comum das empresas.

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, “user”);
define(db_pass, “passwd”);
define(db_link, mysql_connect(db_host,db_user,db_pass));
define(db_name, “my_database”);
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) . “\t”;
}

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 = “\t”;
} else {
$value = str_replace(‘”‘, ‘””‘, $value);
$value = ‘”‘ . $value . ‘”‘ . “\t”;
}
$line .= $value;
}
// o trim retira os espaços encontrados no começo e no final de cada linha encontrada.
$dados .= trim($line).”\n”;
}
// substituindo todas as quebras de linha ao final de cada registro, que por padrão seria \r por uma valor em branco, para que a formatação fique legível
$dados= str_replace(“\r”,””,$dados);

Quinto passo – Tratamento básico de erro:
// Caso não encontre nenhum registro, mostra esta mensagem.
if ($dados== “”) {
$dados = “\n Nenhum registro encontrado!\n”;
}

Ú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.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\n$dados”;
?>

 

PS: Espero que ajude e por favor escrevam p/ thiago.zampieri@gmail.com.

Anúncios