|
||
|
|
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/2007Gerando 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 Artigos relacionados
Links relacionados
Este artigo é a parte 1 de 2 da seguinte série:
Renato <rre_dias@yahoo.com.br>
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 ;)
![]() ![]() ![]() ![]() ![]() Richard <richard.barcelos@gmail.com>
Gostarai de saber o seu msn
![]() ![]() ![]() ![]() ![]() Robson_x <robson_x@yahoo.com.br>
Já estav a algum tempo procurando algo assim.
Me ajudou bastante Muito bom mesmo!!! ![]() ![]() ![]() ![]() ![]() Ricardo <ricardo@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. ![]() ![]() ![]() ![]() ![]() miguel <cherba@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
![]() ![]() ![]() ![]() ![]() Márcio <marciobacci@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.
![]() ![]() ![]() ![]() ![]() Rodrigo Kulb <rodrigo_arroba_levitron_ponto_com_ponto_br>
Achei muito bom gostaria de saber se tem como mudar a cor das tabelas....
![]() ![]() ![]() ![]() ![]() Kaio Mano <kaiomano@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! ![]() ![]() ![]() ![]() ![]() Rafamc <hyper_rmc@hotmail.com>
Ó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!
![]() ![]() ![]() ![]() ![]() jarder <jrmelgaco@msn.com>
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
![]() ![]() ![]() ![]() ![]() ![]() |
|
|