caio1380 0 Denunciar post Postado Fevereiro 24, 2010 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
Marcelo Diniz 0 Denunciar post Postado Fevereiro 24, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 24, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 24, 2010 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
Evandro Oliveira 331 Denunciar post Postado Fevereiro 24, 2010 headers devem ser enviados antes de qualquer tipo de dados http://br2.php.net/manual/en/function.header.php Compartilhar este post Link para o post Compartilhar em outros sites
caio1380 0 Denunciar post Postado Fevereiro 24, 2010 Então não tem como fazer do jeito que eu quero? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 24, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 24, 2010 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
Evandro Oliveira 331 Denunciar post Postado Fevereiro 24, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 24, 2010 Dessa forma tudo bem, funciona! Mais no "arquivo externo", nem tem nenhum dado, pois não foram selecionados! Compartilhar este post Link para o post Compartilhar em outros sites
Preceptor 3 Denunciar post Postado Fevereiro 24, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 25, 2010 Ta exportando sem dados nenhum.. Fica uma pagina em excel em branco... Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 25, 2010 e o que você mandou exportar? ;) Compartilhar este post Link para o post Compartilhar em outros sites
caio1380 0 Denunciar post Postado Fevereiro 25, 2010 Achei que estando na pagina com os dados que selecionei, ele irá exportar este dados... Tem que fazer alguma outra coisa? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 25, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 25, 2010 Ok.. pelo visto é mais complicado do que eu esperava... Você sabe algum site ou tutorial legal p estar me indicando?? Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Fevereiro 25, 2010 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
Preceptor 3 Denunciar post Postado Fevereiro 25, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 25, 2010 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
caio1380 0 Denunciar post Postado Fevereiro 26, 2010 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