Ir para conteúdo

Arquivado

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

Bah Skywalker

Erro ao abrir Excel

Recommended Posts

bom dia

Estou gerando um relatório em php e mysql para excel e o relatório gera tudo certo, mas na hora de abrir o arquivo Excel (xls) ele aparece uma mensagem que o aquivo pode estar corrompido mais se clicar na opção sim ele abre o arquivo normalmente, como que faço para não exibir essa mensagem?

<?php
include_once('../db_functions.php');
$con = dbConnect();
?>

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="utf-8">
        <title>Logs_de_Acesso</title>
    <head>
    <body>

        <?php

            $arquivo = 'Logs_de_Acesso.xls';
            $tabela = '<table border="1">';
            $tabela .= '<tr>';
            $tabela .= '<td colspan="6"><b><center>LOGS DE ACESSO - PORTAL CIRURGIAS RDV</center></b></td>';
            $tabela .= '</tr>';
            $tabela .= '<tr>';
            $tabela .= '<td><b>Id</b></td>';
            $tabela .= '<td><b>Host</b></td>';
            $tabela .= '<td><b>Ip</b></td>';
            $tabela .= '<td><b>Usuario_Nome</b></td>';
            $tabela .= '<td><b>Usuario_Papel</b></td>';
            $tabela .= '<td><b>Data_Evento</b></td>';
            $tabela .= '</tr>';

            function ConverteData($Data){
                if (strstr($Data, "/"))//verifica se tem a barra /
                {
                $d = explode ("/", $Data);//tira a barra
                $rstData = "$d[2]-$d[1]-$d[0]";//separa as datas $d[2] = ano $d[1] = mes etc...
                return $rstData;
                } elseif(strstr($Data, "-")){
                $d = explode ("-", $Data);
                $rstData = "$d[2]/$d[1]/$d[0]";
                return $rstData;
                }else{
                return "Data invalida";
                }
            }

            $data = ConverteData($_POST["data"]);
            $dataf = ConverteData($_POST["dataf"]);

            $sql = "SELECT * from activity_log_sql where data_evento >= '$data' and data_evento <= '$dataf' ORDER BY data_evento";

            $query = mysqli_query($con, $sql);
             
            while($dados = mysqli_fetch_assoc($query)){
             
                $tabela .= '<tr>';
                $tabela .= '<td>'.$dados['id'].'</td>';
                $tabela .= '<td>'.$dados['host'].'</td>';
                $tabela .= '<td>'.$dados['ip'].'</td>';
                $tabela .= '<td>'.$dados['usuario_nome'].'</td>';
                $tabela .= '<td>'.$dados['usuario_papel'].'</td>';
                $tabela .= '<td>'.$dados['data_evento'].'</td>';
                $tabela .= '</tr>';
            }
             
            $tabela .= '</table>';
             
            // Força o Download do Arquivo Gerado
            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}", date( 'dmY-His' ) );
            header ("Content-Description: PHP Generated Data" );

            echo $tabela;

            exit;
        ?>

    </body>
</html>

 

erro.PNG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faço assim e dá certo.

Minha aplicação é MVC, então, no Controller está assim:

 

header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=exportar_canais_vendas_lojas_emissao_{$inicio}_{$fim}.xls");

 

e na View está assim:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
    <head>
        <title></title>
        <meta name="generator" content="LibreOffice 5.1.2.2 (Windows)"/>
        <meta name="created" content="00:00:00"/>
        <meta name="changed" content="2016-10-24T15:30:52.002000000"/>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <style type="text/css">
            body,div,table,thead,tbody,tfoot,tr,th,td,p { font-family:"Liberation Sans"; font-size:x-small }
            a.comment-indicator:hover + comment { background:#ffd; position:absolute; display:block; border:1px solid black; padding:0.5em;  } 
            a.comment-indicator { background:red; display:inline-block; border:1px solid black; width:0.5em; height:0.5em;  } 
            comment { display:none;  } 
        </style>
    </head>
    
    <body>
        
        <table cellspacing="0" border="0">
            
            <tr>
                <td>Mês/Ano</td>
                
                <?php
                    foreach($lojas as $loja)
                    {
                        echo '<td>Internet '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                    
                        echo '<td>Televendas Ativo '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                    
                        echo '<td>Televendas Receptivo '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                        
                        echo '<td>Balcão '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                        
                        echo '<td>Pessoa Jurídica '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                        
                        echo '<td>IFOOD '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                        
                        echo '<td>RAPPI '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                        
                        echo '<td>UBEREATS '.$loja['Loja']['nome'].' R$</td>';
                        echo '<td>Itens:</td>';
                    }
                ?>
            </tr>
            
            <?php
            foreach($categorias as $c => $v)
            {
                echo '<tr>';
                    
                    echo '<td>'.$c.'</td>';
                    
                    foreach($lojas as $l)
                    {
                        echo '<td>'.str_replace('.', ',', $l['reais'][1][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][1][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][14][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][14][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][15][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][15][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][16][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][16][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][0][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][0][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][18][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][18][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][19][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][19][$c]).'</td>';
                        
                        echo '<td>'.str_replace('.', ',', $l['reais'][20][$c]).'</td>';
                        echo '<td>'.str_replace('.', ',', $l['itens'][20][$c]).'</td>';
                    }
                    
                echo '</tr>';
            }
            ?>
            
        </table>
        
    </body>
</html>

 

Outra alternativa muito boa é gerar em CSV se o relatório for simples sem formatações. Pois csv abre em qualquer lugar.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de como devo fazer.
       
      Preciso criar uma Rotina para Cadastrar Faturamento, por exemplo:
      1) 28/42/56 dias -> de 28 p/ 42 a dif. é de 14 dias...
      2) 30/60/90 dias -> de 30 p/ 60 a dif. é de 30 dias...
      3) 0/15/30/45 dias  -> de 0 p/ 15 a dif. é de 15 dias...
       
      Como devo fazer para  cadastrar os prazo de vencimento, onde o sistema possa contar as diferenças entre os dias ?
       
      Grato,
       
      Cesar
    • Por Giovanird
      O script abaixo atualiza a página (centro.php) a cada um minuto e dentro desta página terei uma div que não poderá ser atualizada.
      Tentei colocar esta div como pagina com setInterval de 100 minutos porem ao dar o refresh no centro.php  tudo vai junto.  Será que isto é possivel?

      Desde já meu muito obrigado!
      <script> function atualiza(){ var url = 'centro.php'; $.get(url, function(dataReturn) { $('#centro').html(dataReturn); }); } setInterval("atualiza()",60000); </script>  

    • Por ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho um dominio e vários subdomios dentro.
      Quero saber como recuperar um cookie nos subdominios, uma vez que ele foi criado em um subdominio específico.
       
      Estrutura:
      Tô criando o cookie em usuario.dominio.com.br com o seguinte código:
       
      $valor = md5(uniqid(rand(), true));
      setcookie("token", $valor, time() + (60 * 10), "/", "www.dominio.com.br");
       
      Porém, quero recuperar esse valor em todos os outros subdominios, mas esse codigo aí não tá funcionando.
       
      Alguém pode ajudar?
      Valeu
       
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
×

Informação importante

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