Exclusive
Gerando planilhas 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, 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 .

Postado em: 02/04/2007
side
Comments
 24 pessoas deixaram os seus comentários. Deixe o seu também!
 
Para proteger os usuários contra spam, os emails desta página foram em parte suprimidos)

Wellington@@@@es@brturbo.com.br
E se eu quiser transformar em PDF ao invés de Planilha?

André Müller@@@@s@gmail.com
Olá, dei uma mechida no código pois aqui no blog não é possível ver os caracteres ascii. Segue: <<>> Não aceitamos scripts PHP no campo de comentários <<>>

Dexter@@@@art.br@gmail.com
Obrigado por compartilhar seus conhecimentos menina. Ou 'LittleGuru' se preferir... rsrs. Bjos

Rodrigo Ramalho@@@@gohamalho@gmail.com
Parabéns, excelente artigo.

César Eduardo Teixeira Silva@@@@.teixeira@unimedsa.com.br
Flávio, primeiramente gostaria de dar-lhe os parabens, excelente artigo, me ajudou muito, e obrigado e espero que vc continue a nos ajudar com o seus conhecimentos.
  o Obrigada, mas meu nome é FláviA ok? Abraços
Postado por Flavinha em 26/02/2009

Aldo Nakamura@@@@amura@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

Bruno Feijó da Silv@@@@feijosilva@gmail.com
Parabéns, excelente código!

giba@@@@
Parabéns!
Simples e objetivo.
Num mundo onde temos informações por demais, informações claras e precisas fazem a diferença.Grande!

Adriano Wanderley@@@@signer@hotmail.com
E se por acaso a minha query retornar mais que 65000 registros? Como você vai quebrar a planilha?

Anderson@@@@g@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")

Cláudio Henrique@@@@stemas@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

cleber cardoso@@@@zero@hotmail.com
demais encontrar esses tipo de tutoriais para ajudar na evoluçao de nossa profissão.... abcs flavia...

juliano marcos pereira@@@@no.ofm@hotmail.com
muito bom, só prescisa colocar isso na pratica direto no editor php...

Adriano@@@@
muito bom, isto facilita a vida de muita gente!

Rafamc@@@@_rmc@hotmail.com
Ótimo tutorial, simples e eficaz. Parabéns

Kaio Mano@@@@ano@kaiomano.com
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!

Rodrigo Kulb@@@@go_arroba_levitron_ponto_com_ponto_br
Achei muito bom gostaria de saber se tem como mudar a cor das tabelas..

Márcio@@@@obacci@ig.com.br
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

miguel@@@@a@virconn.net
muito bom. eu só não entendi em que programa eu insiro a primeira codificação bem como o programa que cria arquivos php

Ricardo@@@@do@balancins.com.br
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.

Robson_x @@@@n_x@yahoo.com.br
Já estav a algum tempo procurando algo assim. Me ajudou bastante Muito bom mesmo!!!

Richard@@@@rd.barcelos@gmail.com
Gostarai de saber o seu msn

André Costa Moreira@@@@ok.business@ig.com.br
fla você salvou o meus pescoço com esse script. bjs ;)

Renato@@@@ias@yahoo.com.br
Achei muito interessante e sera de muita utilização

Se este artigo lhe foi útil, comente você também
Nome:
Email:
Comentario:
 

Seu comentário será moderado. Comentários com ofensas ou palavrões serão sumariamente deletados.

 
 
 

Ultimos Artigos

 16/02/2009
EXCLUSIVO - PHP: Enviando emails agendados com Crontab

 16/07/2008
OutroLado/WebInsider - Carreira: Autônomos e freelancers em TI

 07/07/2008
Revista PHP - PHP: Formatando saída de dados direto na query sql - MySQL

 30/06/2008
Revista PHP - PHP: Funções: Aprenda a criar as suas

 26/06/2008
Revista PHP - PHP: Truques com .htaccess - Parte III

 23/06/2008
Revista PHP - PHP: Conexões TCP/IP com fsockopen

 19/06/2008
Revista PHP - PHP: Truques com .htaccess - Parte II

 11/06/2008
Revista PHP - PHP: Truques com .htaccess - Parte I


Ver todos


Feeds Delicious Google Bookmarks
side
Try
Try one of my demo systems
SistMAD
side
side
  google friends

side
PagSeguro
 
 


www.flaviajobs.com.br - 2009 Version - 6 Years!
CSS Valido    XHTML VALIDO     FIREFOX!   PHP   Mysql   Apache