[ PHP - Google ] Gerar XLS pelo PHP.

1,692 views
Skip to first unread message

Daniel Barros

unread,
Apr 28, 2010, 8:56:52 AM4/28/10
to list...@googlegroups.com
Galera, bom dia!


Alguém já exportou dados para uma arquivo do Excel? (.xls)

Pesquisei na internet e encontrei alguns tutoriais, com algumas bibliotecas, segui os exemplos, mas alguns casos não gera o arquivo ou quando gera, o excel abre ele todo errado (abre exibindo conteúdo XML em cada linha).


Alguém teria alguma dica prá me dar? Ou se souberem de algum site ou biblioteca/tuto que funcione legal....????


Agradeço a ajuda.


--
============================================================
LEIAM SEMPRE AS REGRAS DA LISTA:
http://groups.google.com.br/group/listaphp/web/regras-da-lista-php
--
LISTA PHP > http://groups.google.com.br/group/listaphp
--
REVISTA PHP > http://www.revistaphp.com.br
--
AJAX-BRASIL > http://groups.google.com/group/ajax-brasil
--
PYTHON-GOOGLE > http://groups.google.com.br/group/python-google
--
DOTNET-BRASIL > http://groups.google.com.br/group/dotnet_br
============================================================

Rodrigo de Brum Chimainski

unread,
Apr 28, 2010, 1:27:45 PM4/28/10
to list...@googlegroups.com
Procura no phpclasses.org.
A um tempo atrás encontrei uma de poucas que tinha lá bem básica que até hoje não deu problema.

Abraço,
Rodrigo de Brum Chimainski
--
Rodrigo de Brum Chimainski
"Pense diferente"
(55)8402-5972

Andrey Moretti

unread,
Apr 28, 2010, 1:29:55 PM4/28/10
to list...@googlegroups.com
só precisa alterar o cabeçalho.
Sua view pode ser uma tabela, conforme a qual o excel irá montar a estrutura.

assim, por exemplo:

===========
        header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
        header ("Cache-Control: no-cache, must-revalidate");
        header ("Pragma: no-cache");
        header ("Content-type: application/vnd.ms-excel");
        header ("Content-Disposition: attachment; filename="nome_do_arquivo.xls" );
        header ("Content-Description: PHP Generated Data" );
=============


Em 28 de abril de 2010 09:56, Daniel Barros <scro...@gmail.com> escreveu:



--
Att.,
Andrey Moretti

Renato de Freitas Freire

unread,
Apr 28, 2010, 1:31:43 PM4/28/10
to list...@googlegroups.com
http://phpexcel.codeplex.com/

Essa é a solução.. xD

--
Renato de Freitas Freire
ren...@morfer.org


2010/4/28 Rodrigo de Brum Chimainski <rodri...@gmail.com>

Paulo Diovani

unread,
Apr 28, 2010, 2:04:54 PM4/28/10
to list...@googlegroups.com
> Sua view pode ser uma tabela, conforme a qual o excel irá montar a
estrutura.

Essa eu não sabia, e pior q funciona (acabei de testar).

Mas acho mais sensato converter os dados mesmo, pois se um usuário não
utiliza Excel não irá conseguir visualizar.
Na verdade, usando a solução do Andrey, a aplicação vai simplesmente enviar
HTML para o cliente, "mentindo" que está mandando um xls. O MS Excel
converte a visualização, mas outras aplicações não fazem o mesmo.

Daniel, CSV não é uma opção para você?
Se tudo o que precisa é formatar dados em uma tabela simples (sem células
agrupadas, fórmulas ou estilos, coisa que duvido muito que a maioria das
soluções para php façam) um CSV deve funcionar perfeitamente, e pode ser
visualizado no MS Excel, Open Office ou, acredito eu, qualquer editor de
planilhas.

Renato de Freitas Freire

unread,
Apr 28, 2010, 2:20:58 PM4/28/10
to list...@googlegroups.com
A classe que mandei faz isso tudo..
coloca cor, formulas, estilos e um monte de coisas que o excel faz... inclusive opções de impressão, quebra de pagina, fontes, formatação condicional, comentários, etc, etc, etc...
alem de gerar arquivos do excel 2007 (xlsx)...

muito boa... vale a pena mesmo...

--
Renato de Freitas Freire
ren...@morfer.org


2010/4/28 Paulo Diovani <pa...@diovani.com>

Andrey Moretti

unread,
Apr 28, 2010, 2:24:20 PM4/28/10
to list...@googlegroups.com
blz, bom saber, não conhecia ela....
Não uso muito exportação, mas é sempre bom ter algo na manga pra qd precisar!

vlw a dica!
--
Att.,
Andrey Moretti

Paulo Diovani

unread,
Apr 28, 2010, 2:31:09 PM4/28/10
to list...@googlegroups.com
> Não uso muito exportação, mas é sempre bom ter algo na manga pra qd
precisar!

Sempre tem alguém que pede que sejam disponibilizados relatórios em *.xls ou
*.pdf.
Não entendo porque, já que HTML é bem mais versátil. Criar um link
permanente para um relatório seria bem mais prático.

Mas... fazer o que, se é cliente que quer.

Andrey Moretti

unread,
Apr 28, 2010, 2:38:32 PM4/28/10
to list...@googlegroups.com
pow, foi mal....quis dizer exportação em Excel.

Pdf rola muito....é bem mais comum para emissão de relatórios.

Excel normalmente quando os dados são muito mais tabulares.



2010/4/28 Paulo Diovani <pa...@diovani.com>



--
Att.,
Andrey Moretti

Andreus Timm

unread,
Apr 28, 2010, 2:38:17 PM4/28/10
to list...@googlegroups.com
Primeiramente peço desculpas aos colegas por não ler todos, mas vou ver se consigo ajudar...

A maneira mais rápida/simples é guardar o conteúdo em uma string, formatando ele numa tabela mesmo, tabela de HTML e logo após jogar seu conteúdo para um arquivo, com um simples

<?php

$conteudo = '<table ....>.....</table>';
$file = fopen('nome_arquivo.xls','w+');
fwrite($file, $conteudo);
fclose($file);

?>

Se quizer trabalhar com .csv vc tem que guardar na var $conteudo apenas o valor separando por ; (ponto e virgula) ou \t e no final um \n para ele entender que é nova linha.

dai vc vai no excel e manda importar pela maneira que vc selecionou... com tabulação ou ponto e virgula.
Ah, não esqueça de colocar a primeira linha como cabeçalho.

Bom, ta ai a dica, espero ter ajudado.


Andreus Timm
andreu...@gmail.com
(14) 9672-7890
(51) 9243-1668

Renato de Freitas Freire

unread,
Apr 28, 2010, 2:42:39 PM4/28/10
to list...@googlegroups.com
Exportação em excel as vezes é necessário quando o cliente precisa manipular os dados gerados...
no meu caso, gero alguns relatórios, exporto em excel, os analistas trabalham os dados e geram uma apresentação pra diretoria...

quando é relatório só para visualização, aí sim, html na veia...

--
Renato de Freitas Freire
ren...@morfer.org


Daniel Barros

unread,
Apr 28, 2010, 3:24:29 PM4/28/10
to list...@googlegroups.com
Então, na verdade tenho algumas células agrupadas no cabeçalho das colunas.

Acho que isso pode estar causando o erro aqui. Pois gerar o arquivo, ele gera, mas o excel não abre. Digo abre com uma planilha em bco.

Com o exemplo (símples) que o Thiago passou, funciona, mas a minha tabela (que tem alguns "colspan" pra agrupar as céluas) não está funcionando. Vou tirar toda a formatação e outras coisas p/ ver se dá certo.

Daniel Barros

unread,
Apr 28, 2010, 1:58:00 PM4/28/10
to list...@googlegroups.com
Galera, muito obrigado!

Só coloquei os cabeçalhos e gerei a tabela, funcionou. O Excel dá uma msg na hora de abrir mas fora isso tá tudo certo.

O engraçado é que eu já tinha pegado uns exemplos usando o header() na net, mas não estavam gerando o arquivo.

Deve ter sido alguma besteira que eu fiz com o CTRL+C, CTRL+V


Falow galera, valew....

Alan Nogueira

unread,
Apr 28, 2010, 1:26:06 PM4/28/10
to list...@googlegroups.com
usa esse aqui http://codigofonte.uol.com.br/codigo/php/arquivos/exportar-para-excel-os-dados-de-uma-tabela-mysql

eu utilizo e funciona perfeitamente

Em 28 de abril de 2010 09:56, Daniel Barros <scro...@gmail.com> escreveu:



--
Alan Nogueira

Allan Torres ( Hazi)

unread,
Apr 28, 2010, 8:21:30 PM4/28/10
to list...@googlegroups.com
 
Allan

2010/4/28 Daniel Barros <scro...@gmail.com>



--
Allan Torres

Paulo Diovani

unread,
Apr 29, 2010, 9:50:31 AM4/29/10
to list...@googlegroups.com
Já passaram duas vezes a solução de uma biblioteca para converter pra Excel
e os caras insistem em fazer uma tabela HTML e mandar cabeçalhos incorretos.
¬¬

Pessoal, só porque funciona, não quer dizer que esteja certo. Não custa
converter e garantir que o usuário vá receber um arquivo do Excel. Assim, se
ele usar Open Office ou Google Docs vai conseguir abrir do mesmo jeito.

__
Paulo Diovani Gonçalves
pa...@diovani.com
http://diovani.com

Daniel Barros

unread,
Apr 29, 2010, 11:12:36 AM4/29/10
to list...@googlegroups.com
Concordo com o Paulo, o correto é gerar já o arquivo correto.

Apesar de que atualmente, eu tô tentando qquer coisa....   Ainda não consegui fazer gerar a tabela.

O que acontece é que se eu "chumbar" uma tabela html de exemplo, gera certinho, sem problema nenhum, abro ela certinho no Excel. Mas no meu caso p/ gerar minha tabela rodo alguns scripts PHP para gerar a tabela, o que acontece é que está gerando um arquivo vazio, sem a tabela.

Não sei se a demora do servidor em processar as querys no banco ou até mesmo o apache em processar os scripts está causando algo do tipo: "Enquanto o servidor está processando as informações o arquivo é criado e fechado sem dar tempo de retornar a tabela."


Enquanto isso, continuo tentando...


Valew galera....

Paulo Diovani

unread,
Apr 29, 2010, 1:36:36 PM4/29/10
to list...@googlegroups.com
Fiz uma comparação com pdf, anteriormente, por ser também um formato fechado
que possui uma sintaxe totalmente diferente do HTML. Onde trabalho, por
exemplo, temos alguns relatórios em PDF que são monstros distorcidos que
tentam devorar nossas mentes.

Acredito que com o Excel seja um pouco mais simples, por você ter que se
preocupar mais com dados, e menos com posicionamento. Mas acho que a
conversão vai acabar lhe exigindo algum esforço de qualquer jeito.

A dica é adicionar os custo extra da criação dos scripts de conversão ao
projeto, quando o cliente solicitar relatórios em Excel. Não existe solução
rápida, boa e barata ao mesmo tempo.

Tanure

unread,
Apr 29, 2010, 1:42:45 PM4/29/10
to list...@googlegroups.com

Daniel Barros

unread,
Apr 29, 2010, 4:10:22 PM4/29/10
to list...@googlegroups.com
Enfim galera, consegui gerar e abrir o arquivo formatadinho e tudo mais.

Espero que isso mantenha o cliente algum tempo ocupado....   (enquanto isso vou aprendendo a usar alguma biblioteca que gere mesmo um  arquivo excel.)


Mas por hora, agradeço a ajuda e as dicas, galera velew....

Daniel Barros

unread,
Apr 29, 2010, 4:06:13 PM4/29/10
to list...@googlegroups.com
Sim você tem razão Paulo, o problema é que trabalho em uma agência de Marketing Digital e venderam uma coisa para o cliente sem mensurar isso. E o pior os caras (vendedores) acham que é fácil "É só clicar em salvar como." me disseram uma vez.

Bom, depois disso fomos obrigados a fazer uma reunião com a gerência, desenv, vended, etc....    Não preciso nem dizer o quebra pau que foi.

Aqui a gente costuma dizer que o cliente compra as coisas como se estivessem comprando carne...

"Me dá meio quilo de sites..." 


Hehehehehe!!!!!

Leonardo Rocha

unread,
Apr 30, 2010, 12:28:18 AM4/30/10
to list...@googlegroups.com

Fantástica, essa classe. Está me quebrando um galhão...

 

Agora, e para gerar documento do Word? Existe uma no nível dessa?

 

Obrigado.

 

Leonardo

 

De: list...@googlegroups.com [mailto:list...@googlegroups.com] Em nome de Renato de Freitas Freire
Enviada em: quarta-feira, 28 de abril de 2010 14:32
Para: list...@googlegroups.com
Assunto: Re: [ PHP - Google ] Gerar XLS pelo PHP.

 

Rodrigo Sartori Jarouche

unread,
Apr 30, 2010, 12:40:17 AM4/30/10
to list...@googlegroups.com
Sobre o Word,
 
Tem esses dois meios. O Cabeçalho
 
header("Content-Type: application/vnd.ms-word");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment;filename=test.doc");
 
E também com o COM (só servidor rodando windows... péssimo, mas fica para conhecimento)
 
<?php
$word = new COM("word.application") or die ("couldnt create an instance of word");
echo "loaded , word version{$word->version}";
//bring word to the front
$word->visible = 1;
//open a word document
$word->Documents->Add();
//add some text to the document
$word->Selection->TypeText("this is some sample text in the document");
//save the document as sampleword.doc
$word->Documents[1]->SaveAs("sampleword.doc");
//close word
$word->Quit();
//free object resources
$word->Release();
$word = null;
?>

Rodrigo Sartori Jarouche

image005.jpgimage001.gifimage002.jpgimage003.jpgimages.jpg

image001.jpg
image002.gif
image003.jpg
image004.jpg
image005.jpg
image006.jpg

Rodrigo Sartori Jarouche

unread,
Apr 30, 2010, 12:35:26 AM4/30/10
to list...@googlegroups.com
Uma outra solução, mandar os dados para o cabeçalho, eu acho mais simples...
 
<?php

header("Cache-Control: no-cache, must-revalidate");

header("Content-Transfer-Encoding: binary");

header('Expires: 0');

header('Pragma: no-cache');

header("Content-type: application/xsl-excel; charset=utf-8");

header("Content-Disposition: attachment; filename=relatorioqualquer.xls");

header("MIME-Version: 1.0 ");

$caminhoIMG

= FILEIMG.$imgcliente;

$caminhoLogoIMG

= FILEIMG."logo_cadastra2.png";

echo

'<table width="100%" border="0" cellspacing="1" cellpadding="1" align="center">';

echo

' <tr>';

echo

' <td class="cabImg"><img src="'.$caminhoLogoIMG.'" width="244" height="81" border="1"</td>';

echo

' <td class="cabImg">&nbsp;&nbsp;</td>';

echo

' <td class="cabImg"><img src="'.$caminhoIMG.'" width="200" height="71" border="1"></td>';

echo

' </tr>';

?>

Rodrigo Sartori Jarouche

image005.jpgimage001.gifimage002.jpgimage003.jpgimages.jpg

Sent: Friday, April 30, 2010 1:28 AM
image001.jpg
image002.gif
image003.jpg
image004.jpg
image005.jpg
image006.jpg

Paulo Diovani

unread,
Apr 30, 2010, 8:08:30 AM4/30/10
to list...@googlegroups.com
Rodrigo, prefira ler o post todo antes de responder.

Essa solução-gambiarra de mandar cabeçalhos dizendo que o formato é do Excel
mas na realidade mandar HTML foi justamente o que causou mais discussão aqui
na lista e, embora em caso de extrema urgência, funcione para certos
clientes, acho que todos concordamos (até mesmo o autor do tópico) que é uma
péssima solução, e que o melhor a fazer é mesmo utilizar uma ferramenta para
converter e formatar os dados como um arquivo nativo do Excel.

Paulo Diovani

unread,
Apr 30, 2010, 8:09:33 AM4/30/10
to list...@googlegroups.com
> Agora, e para gerar documento do Word? Existe uma no nível dessa?

Para Word é bem mais fácil, basta enviar o conteúdo como text/plain. Assim
tu (quase) garante que o Word vai renderizar certo.
^^

Renato de Freitas Freire

unread,
Apr 30, 2010, 9:03:53 AM4/30/10
to list...@googlegroups.com
Para salvar arquivos do word, vc pode salvar em RTF, que deve ser mais facil encontrar alguma classe que escreva... ja que eh um formato aberto...

Nunca testei, mas ja vi algumas classes que salvam arquivos RTF...
as vezes ajuda..


Uma olhada no phpclasses pode ser util tbm...

Mas na minha opiniao, salvar em .doc ou em .pdf daria no mesmo... (claro... pras minhas necessidades atuais).

--
Renato de Freitas Freire
ren...@morfer.org


Edy Segura

unread,
Apr 30, 2010, 9:43:44 AM4/30/10
to LISTA PHP

Aqui (http://labs.edysegura.com/excel-write/) tem um exemplo de como
exportar para o excel. E de VERDADE!


On Apr 28, 9:56 am, Daniel Barros <scroow...@gmail.com> wrote:
> Galera, bom dia!
>
> Alguém já exportou dados para uma arquivo do Excel? (.xls)
>
> Pesquisei na internet e encontrei alguns tutoriais, com algumas bibliotecas,
> segui os exemplos, mas alguns casos não gera o arquivo ou quando gera, o
> excel abre ele todo errado (abre exibindo conteúdo XML em cada linha).
>
> Alguém teria alguma dica prá me dar? Ou se souberem de algum site ou
> biblioteca/tuto que funcione legal....????
>
> Agradeço a ajuda.
>
Reply all
Reply to author
Forward
0 new messages