Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

caio1380

Exportar para Excel

Recommended Posts

olá,

 

Andei dando uma olhada na internet, porem, com os exemplos citados não consegui fazer nada.

 

Tenho uma pagina em php com uma tabela cheia de informações, informações estas que são atualizadas diariamente, através de um cadastro.

No final dessa pagina, quero um "botao" para que os dados sejam exportados para o Excel.

 

Agradeço a ajuda

 

At.

Compartilhar este post


Link para o post
Compartilhar em outros sites

para exportar você pode fazer assim. Quando o usuário clicar em exportar você envia todas informações de filtragem, caso tenha, para uma outra página que você cria todo o relatório igual ao que você esta fazendo, as querys e tudo mais, só que antes de qq impressão (echo, por exemplo) você coloca os headers para formar o excel, fazer o download.

 

<?php
$arquivo = "relatorio.xls";
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
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/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );

e dai em diante você forma o relatório

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda! O codigo funciona.

 

Porem, para mim ocorre o seguinte:

 

Esta pagina com as informações, só é mostrada após escolher alguns dados (como departamento, ano, dia...)

Se eu criar um botão exportar, com o link para uma nova pagina, esta nova pagina estará em branco, pois nenhum dado foi selecionados...

No final, acaba sendo exportado apenas o cabeçalho da pagina...

 

 

Alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para não ter que abrir outra pagina, fiz da seguinte forma:

 

<form name="form1" method="post"action="<?php
$arquivo = "relatorio.xls";
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
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/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );
?>"
<input name="submit" type="submit" value="Exportar Dados">
</form>

 

Está dando o seguinte erro:

Not Found

 

The requested URL /<br /><b>Warning</b>: Cannot modify header information - headers already sent by (output started at ...) in <b></b> on line <b>162</b><br /><br />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então não tem como fazer do jeito que eu quero?

 

 

analise o código:

<form name="form1" method="post"action="<?php

$arquivo = "relatorio.xls";

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

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/x-msexcel");

header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );

header ("Content-Description: PHP Generated Data" );

?>"

<input name="submit" type="submit" value="Exportar Dados">

</form>

content-type -> indica o tipo do arquivo que será aberto (planilha do excel)

content-disposition: attachment -> significa que o browser deve tratar o conteúdo como um download

 

resumindo, você está baixando uma planilha do excel.

porém a planilha não vai dar suporte para tags html

 

estes cabeçalhos devem vir na página do relatório gerado e não do gerador

 

 

também recomendo o uso da biblioteca PHPExcel

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpem a ignorância, estou começando agora no PHP.

 

Ainda não estou conseguindo. Quando eu coloco o codigo abaixo ele simplesmente não aparece nada:

<form name="form1" method="post"action="<?php
$arquivo = "relatorio.xls";
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
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/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );
?>"
<input name="submit" type="submit" value="Exportar Dados">
</form>

 

Caso eu tire o <form> e o <input> ele dá erro. Mais ok, pois não é assim que deve ser.

Ele deve baixar o conteudo da pagina atual apenas quando clicar no botão "exportar"

 

Desculpe estar incomodando com duvidas bestas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte cara, vou resumir o erro pra você... você simplesmente NÃO PODE imprimir caracteres antes de enviar headers();

 

 

o que você está tentando fazer aí é mais ou menos se eu fizesse isso aqui:

 

<a href="<html><head><title>Oi</title></head><body>Oi</body></html>">Clique</a>

 

 

seu erro não está na lógica PHP seu erro está na estruturação de dados

 

aponte o action="" para um arquivo externo, e neste arquivo voce seta os headers

Compartilhar este post


Link para o post
Compartilhar em outros sites

Moço, tenta fazer assim pra ver se funfa ai seu codigim

 


<?php
// verifica se o formulario foi enviado

if(isset($_POST['ativar'] )):

$arquivo = "relatorio.xls";

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
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/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );

exit;
endif;
?>


<form name="form1" method="post"  action="<?php echo $_SERVER['PHP_SELF'] ?>" />
  <input name="ativar" type="hidden" value="1">
  <input name="submit" type="submit" value="Exportar Dados">
</form>

Precisa ficar fazendo arquivo a torta e a direita não.

 

 

Mais uma coisa, esse bloco aqui tem que ser a primeira coisa da sua pagina, nao pode ter nada antes dela

 

<?php
// verifica se o formulario foi enviado

if(isset($_POST['ativar'] )):

$arquivo = "relatorio.xls";

header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
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/x-msexcel");
header ("Content-Disposition: attachment; filename=\"{$arquivo}\"" );
header ("Content-Description: PHP Generated Data" );

exit;
endif;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

nossa!!!

você tem que processar os dados, trabalhar, formatar, e se utilizar a livraria que eu te recomendei, ainda tem que linkar as estruturas ao arquivo!!!!!

 

 

comece do começo, remova todos os header()'s e faça com que o PHP exiba uma tabela em HTML mesmo com os dados que você quer exportar para o excel

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesta página tem um exemplo

 

http://phpexcel.codeplex.com/wikipage?title=Examples&referringTitle=Home

 

atente-se principalmente para esta parte

$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('B2', 'world!');
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Hello');
$objPHPExcel->getActiveSheet()->SetCellValue('D2', 'world!');

que é onde se define o valor de cada célula

Compartilhar este post


Link para o post
Compartilhar em outros sites

hummm, li com calma e acho que agora eu entendi.

 

Você consulta um banco de dados e gera uma tabela e precisa que esta tabela seja salva no excel. Se realmente for isso o excel le arquivos html ai é pratico o nigucim pra se fazer. Você vai ter que gerar o cabecalho de xls, fazer uma consulta gerando uma tabela e tera um arquivo xls prontinho

 

<?php
if(isset($_POST['ativar'] )):

// set os headers para gerar saida do excel
        // gera saida correta pra porqueira do IEca
        if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")):
                 header('Expires: 0');
                 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                 header("Content-Transfer-Encoding: binary");
                 header('Pragma: public');
                 #header("Content-Length: ".strlen($data));
        else:
                 header("Cache-Control: private");
                 header("Content-Transfer-Encoding: binary");
                 header('Expires: 0');
                 header('Pragma: no-cache');
                 #header("Content-Length: ".strlen($data));
        endif;
        
                header("Content-type: application/vnd.ms-excel");
                header("Content-type: application/force-download");
                header("Content-Disposition: attachment; filename=relatorio-".time().".xls");

// monta a primeira linha 
$cab =  "<table>";
$cab .= "<tr>";
$cab .= "<td>Nome</td>";
$cab .= "<td>Idade</td>";
$cab .= "<td>Sexo</td>";
$cab .= "</tr>";

print $cab;

// consulta o banco
$sql = mysql_query("select nome,nascimento,sexo from sua_tabela") or die (mysql_error());

$txt = '';

// lista os resultados da consulta
while ($d = mysql_fetch_array($sql) ):

// gera cada lnha com dados
$txt .= "<tr>";
$txt .= "<td>{$d['nome']}</td>";
$txt .= "<td>{$d['nascimento']}</td>";
$txt .= "<td>{$d['sexo']}</td>";
$txt .= "</tr>";

// mostra o resultado na tela
print $txt;

// limpa o resultado para gerar nova linha
$txt = '';

endwhile;

// fim do verifica envio pelo form
endif;
?>


<form name="form1" method="post"  action="<?php echo $_SERVER['PHP_SELF'] ?>" />
  <input name="ativar" type="hidden" value="1">
  <input name="submit" type="submit" value="Exportar Dados">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso eu coloco no topo de cada pagina gerada, ou coloco no gerador??

 

Estou com duvida quanto a ligação com o Banco de dados

 

// consulta o banco
$sql = mysql_query("select nome,nascimento,sexo from sua_tabela") or die (mysql_error());

 

Cada planilha de resultados é derivado de uma planilha no banco de dados, por isso que estou achando q tem de ser em cada pagina gerada.

 

E o comando abaixo na pagina geradora:

 

<form name="form1" method="post"  action="<?php echo $_SERVER['PHP_SELF'] ?>" />
 <input name="ativar" type="hidden" value="1">
 <input name="submit" type="submit" value="Exportar Dados">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tava aqui pensando..

 

E se ao invés de eu usar a biblioteca PHPExcel, que eu não entendi nada...Eu faça o seguinte:

 

Na barra de endereço é mostrado as opções escolhidas pelo usuário para gerar o relatório (Sistema, Ano, Mes, Dia....)

Então eu crio um botão exportar que redireciona para uma pagina nova com o relatório gerado (que vai ser igual, pois os dados terão sido recuperados da barra de endereço da pagina anterior) Ai é só coloca os "headers" no topo desta nova pagina que ele irá imprimir em excel automaticamente.

 

 

O lado ruim, é que para cada "sistema" que eu tenho, terei que criar um espelho, só com que os "headers".

 

O que acham??? E existe algum jeito de fazer isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.