Ir para conteúdo

Arquivado

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

Danilo Ramon

Exportar Registros em XLS ( Excel ) - Mais de 20 mil registros - MySQL

Recommended Posts

Olá Pessoal, tudo bem ?

 

Fiz um código para exportar Excel, porém não estou conseguindo, até 15 mil registros funciona perfeitamente a função abaixo, após isso, o servidor trava e não consegue, pois precisa de uma alta memória virtual.

 

O pior que meu cliente, aceita somente relatório em XLS, como devo fazer ? Alguma Luz ?


<?php
session_start();

// Nome do Arquivo do Excel que será gerado
$arquivo_exportacao = 'exportacao_avisos.xls';

ini_set('default_charset', 'UTF-8');
header("Content-type: text/html; charset=iso-8859-1");

// Força o Download do Arquivo Gerado
header ('Cache-Control: no-cache, must-revalidate');
header ('Pragma: no-cache');
header('Content-Type: application/x-msexcel');
header ("Content-Disposition: attachment; filename=\"{$arquivo_exportacao}\"");

extract($_POST);

$id = $_GET['id'];

$contagem_aplicacao = PDO_contagemRegistros("avisos_usuario_assoc", array("id_aviso" => $_GET['id']));

if ($contagem_aplicacao >= 1) {    


// Criamos uma tabela HTML com o formato da planilha para excel
$tabela_exportacao = '<table border="1">';
$tabela_exportacao .= '<tr>';
$tabela_exportacao .= '<td><b>Título Documento</b></td>';
$tabela_exportacao .= '<td><b>Nome</b></td>';
$tabela_exportacao .= '<td><b>Transportadora</b></td>';
$tabela_exportacao .= '<td><b>Data Leitura</b></td>';
$tabela_exportacao .= '<td><b>Horário Leitura</b></td>';
$tabela_exportacao .= '</tr>';

$listar_codigos = PDO_listarTabela("avisos_usuario_assoc", " WHERE id_aviso = '$id' ORDER BY id_transportadora ASC");

    $d = new ArrayIterator($listar_codigos);
    while ($d->valid()):

        $listar_codigos = $d->current();

        $selecionar_usuario = PDO_selecionarRegistro("usuario", array("id_usuario" => $listar_codigos['id_usuario']));
                                    
        $selecionar_transportadora = PDO_selecionarRegistro("transportadora", array("id_transportadora" => $listar_codigos['id_transportadora']));

        $selecionar_documento = PDO_selecionarRegistro("avisos", array("id_aviso" => $id));

        $tabela_exportacao .= '<tr>';
        $tabela_exportacao .= '<td>';
        $tabela_exportacao .= $selecionar_documento['titulo'];
        $tabela_exportacao .= '</td>';
        $tabela_exportacao .= '<td>';
        $tabela_exportacao .= $selecionar_usuario['nome_completo'];
        $tabela_exportacao .= '</td>';
        $tabela_exportacao .= '<td>';
        $tabela_exportacao .= $selecionar_transportadora['nome_fantasia'];
        $tabela_exportacao .= '</td>';
        $tabela_exportacao .= '<td>';
        $tabela_exportacao .= date('d/m/Y', strtotime($selecionar_documento['data_hora_publicacao']));
        $tabela_exportacao .= '</td>';
        $tabela_exportacao .= '<td>';
        $tabela_exportacao .= date('H:i:s', strtotime($selecionar_documento['data_hora_publicacao']));
        $tabela_exportacao .= '</td>';;
        $tabela_exportacao .= '</tr>';


    $d->next();
endwhile;

$tabela_exportacao .= '</table>';



echo $tabela_exportacao;

}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não pode paginar ? e jogar em mais de um arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se o problema é memória vc precisa dar um "espaço" para q a máquina libere a memória.

 

Grave o arquivo em lotes, paginando mesmo que vá gravar em um só, só de vc fechar a conexão e liberar a gravação paginada, creio que conseguirá liberar memória nesse processo.

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.