Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » PHP » Gerando planilhas com PHP e Mysql -->
 
Avaliação: | Publicado em: 29/03/2007
Gerando planilhas com PHP e Mysql
Flavia Jobstraibizer é analista programadora, atuando há 6 anos no desenvolvimento de soluções online. Trabalha com Delphi, PHP, Mysql, PostgreSql, Sql Server, XML, Ajax, etc. Atualmente é Gerente de TI em uma empresa de tecnologia em São Paulo - SP.


Gerando uma planilha formato XLS com PHP e MySql

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, o tema do meu primeiro artigo aqui no Plugmasters.

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) . "\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_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\n$dados";
?>

Para ver o script deste arquivo em funcionamento, clique aqui .
Espero que tenha sido de valia, e caso tenham dúvidas, por favor me escrevam no fjferr@gmail.com, ou através do formulário de contato do meu site: www.flaviajobs.com.br

Este artigo é a parte 1 de 2 da seguinte série:
  1. Gerando planilhas com PHP e Mysql
  2. Galeria de fotos com Flash, PHP e XML

Achei muito interessante e sera de muita utilização
André Costa Moreira <mourdok.business@ig.com.br>
fla você salvou o meus pescoço com esse script. bjs ;)
Gostarai de saber o seu msn
Já estav a algum tempo procurando algo assim.

Me ajudou bastante

Muito bom mesmo!!!
Flavia,

Parabens, mais uma vez consegui aprender com você, acho que é um dom seu. Agora eu estou com um problema no servidor e em algumas máquinas que estão na TI os arquivos são gerados corretamente, porem nas estações o arquivo é gerado pela metade, ou nem isso não gera completo como se abortasse no meio da geração e depois que é gerado a primeira vez dá a seguinte mensagem. "Não é possível ler o Arquivo". Vc já viu isso? Pode me ajudar?
Muito Obrigado.
muito bom. eu só não entendi em que programa eu insiro a primeira codificação bem como o programa que cria arquivos php
Este artigo caiu como uma luva, pois já fazia um tempo que eu precisava gerar uma planilha do excel com PHP. Só estou com um problema agora. Quando a planilha é gerada, as células que contém acentuação exibem caracteres especiais.
Achei muito bom gostaria de saber se tem como mudar a cor das tabelas....
Simplesmente excelente!
Veio na hora certa!
Parabéns pelo belo trabalho!
Não sei se é possível, mas derrepente mais pra frente você poderia escrever um tutorial ensinando a modificar a aparência da tabela.
Obrigado!
Grande abraço!
Ótimo tutorial, simples e eficaz. Parabéns
Adriano
muito bom, isto facilita a vida de muita gente!
juliano marcos pereira <juliano.ofm@hotmail.com>
muito bom, só prescisa colocar isso na pratica direto no editor
php...
cleber cardoso <setorzero@hotmail.com>
demais encontrar esses tipo de tutoriais para ajudar na evoluçao de nossa profissão....

abcs flavia...
Cláudio Henrique <hs_sistemas@hotmail.com>
Nossa!!! Artigo de excelentíssima qualidade. Melhor ainda é saber que as mulheres estão cada vez mais tomando uma fatia maior no mercado de trabalho na área de desenvolvimento.
Parabéns!!!
http://euprogramo.blogspot.com
Anderson <amsigg@ig.com.br>
Muito bom interessante este artigo, mas, tenho uma dúvida ainda, o que significa o cabeçalho

header("Content-type: application/octet-stream")
Adriano Wanderley <aswdesigner@hotmail.com>
E se por acaso a minha query retornar mais que 65000 registros? Como você vai quebrar a planilha?
giba
Parabéns!
Simples e objetivo.
Num mundo onde temos informações por demais, informações claras e precisas fazem a diferença.Grande!
Bruno Feijó da Silva <brunofeijosilva@gmail.com>
Parabéns, excelente código!
no link para ver o codigo funcionando ta cheio de erro!!!!!!!!!!!!!!
assim ñ da...
Flávia <fjferr@gmail.com>
A gente tenta ajudar e tem manés reclamando... incrível... por isso não ajudo mais esse povo. Fala sério. : Não avaliado
Aldo Nakamura <ajnakamura@gmail.com>
Olá Flávia, como vai? Acho que já nos conhecemos através do php_sem_limites, não é? Também utilizo a classe que gera arquivos Excel pelo PHP e estou com um probleminha: gerar conteudo em célular de uma string com mais de 255 caracteres. Você já teve este problema em gerar planilhas assim??? Obrigado! Abraços! Aldo