Lentidão ao exportar dados PHPExcel
Boa tarde!!
Estou utilizando para exportação de dados PHPExcel na minha aplicação em Laravel 5.2.
Quando vou exportar um numero maior que 1000 registros, o phpexcel demora muito para gerar os arquivos e caso for mais de 8000 registros, ocorre perda de dados e da como pagina não encontrada.
Na minha tela de exportação, eu permito com que o usuário selecione as colunas que ele quer ter no arquivo.
Segue HTML das colunas
<div class="clearfix form-group">
<div class="col-md-2">
<div class="clearfix">
<label class="pull-left" for="colunas"> *Ficha </label>
</div>
<div class="pull-left">
<select class="form-control" multiple="multiple" id="colunas" name="colunas[]">
<option value="Contrato" selected="select"> Contrato </option>
<option value="Processo" selected="select"> Processo </option>
<option value="Dossiê/NPJ" selected="select"> Dossiê/NPJ </option>
<option value="Executado" selected="select"> Executado </option>
<option value="Pessoa" selected="select"> Pessoa </option>
<option value="CPF/CNPJ" selected="select"> CPF/CNPJ </option>
<option value="Fiadores/Avalistas/Terceiros" selected="select"> Fiadores/Avalistas/Terceiros </option>
<option value="Cliente" selected="select"> Cliente </option>
<option value="Carteira" selected="select"> Carteira </option>
<option value="UF" selected="select"> UF </option>
<option value="Comarca" selected="select"> Comarca </option>
<option value="Ficha" selected="select"> Ficha </option>
<option value="Incidente" selected="select"> Incidente </option>
<option value="Valor" selected="select"> Valor </option>
<option value="Data_Ajuizamento" selected="select"> Data Ajuizamento </option>
<!-- <option value="Data Despacho" selected="select"> Data Despacho </option> -->
</select>
</div>
</div>
<div class="col-md-4">
<div class="clearfix">
<label class="pull-left"> *Informações Processuais </label>
</div>
<div class="pull-left">
<select class="form-control" multiple="" id="colunas" name="colunas[]">
<option value="Situacao_Andamento" selected="select"> Situação Andamento </option>
<option value="Revisional" selected="select"> Revisional </option>
<option value="Processo_Revisional" selected="select"> Processo Revisional </option>
<option value="Cessão_de_Crédito" selected="select"> Cessão de Crédito </option>
<option value="Embargos" selected="select"> Embargos </option>
<option value="Processos_Embargos" selected="select"> Processos Embargos </option>
<option value="Existencia_de_Garantia" selected="select"> Existencia de Garantia </option>
<option value="Identificação_Garantia" selected="select"> Identificação Garantia </option>
<option value="Recuperação_de_Crédito" selected="select"> Recuperação de Crédito </option>
<option value="Citação" selected="select"> Citação </option>
<option value="Partes_Citadas" selected="select"> Partes Citadas </option>
<option value="Pagamento_Recuperação" selected="select"> Pagamento Recuperação</option>
<option value="Especificar_Recuperação" selected="select"> Especificar Recuperação </option>
<option value="Mandados_Negativos" selected="select"> Mandados Negativos </option>
<option value="Acordo" selected="select"> Acordo </option>
<option value="Pagamento_Acordo" selected="select"> Pagamento Acordo </option>
<option value="Data_Acordo" selected="select"> Data Acordo </option>
<option value="Leilão" selected="select"> Leilão </option>
<option value="Data_Leilão" selected="select"> Data Leilão </option>
<option value="Data_Rematação" selected="select"> Data Rematação </option>
<option value="Valor_Rematação" selected="select"> Valor Rematação </option>
<option value="Descrição_Leilão" selected="select"> Descrição Leilão </option>
<option value="Ativo" selected="select"> Ativo </option>
</select>
</div>
</div>
</div>
Em seguida no meu arquivo de Controller faço a busca na base
$exec = DB::table('execucao_acompanhamento as a')
->join('execucao_clientes as b','a.cliente_id','=','b.id')
->join('execucao_carteira as c','a.carteira_id','=','c.id')
->join('gn_cidades as d','a.comarca_id','=','d.id')
->join('execucao_status as f','a.status_id','=','f.id')
->join('execucao_tipo_pessoa as g','a.pessoa','=','g.id')
->join('execucao_citacao as h','a.citacao','=','h.id')
->join('execucao_recuperacao_credito as i','a.rec_credito','=','i.id')
->join('execucao_pagamento_recuperacao as j','a.pagamento_rec','=','j.id')
->join('execucao_leilao as k','a.leilao','=','k.id')
->join('execucao_acordo as l','a.acordo_id','=','l.id')
->leftjoin('execucao_pagamento as m','a.pagamento_id','=','m.id')
->join('execucao_revisional as n','a.revisional','=','n.id')
->join('execucao_cessao_credito as o','a.cessao_credito','=','o.id')
->join('execucao_embargos as p','a.embargos','=','p.id')
->join('execucao_existencia_garantia as q','a.exist_garantia','=','q.id')
->select('a.contrato as Contrato','a.processo as Processo','a.financiado as Executado','f.name as Situacao_Andamento','b.name as Cliente','c.name as Carteira','d.name as Comarca','d.uf as UF','a.data_ajuizamento as Data_Ajuizamento','a.cpf_cnpj as CPF/CNPJ','a.dossie as Dossiê/NPJ','a.valor as Valor','a.ficha as Ficha','a.incidente as Incidente','g.name as Pessoa','a.fiadores as Fiadores/Avalistas/Terceiros','h.name as Citação','a.partes_citadas as Partes_Citadas','i.name as Recuperação_de_Crédito','j.name as Pagamento_Recuperação','a.especificacao_rec as Especificar_Recuperação','a.mandados_negativos as Mandados_Negativos','k.name as Leilão','a.data_leilao as Data_Leilão','a.data_rematacao as Data_Rematação','a.valor_leilao as Valor_Rematação','a.descricao_leilao as Descrição_Leilão','l.name as Acordo','m.name as Pagamento_Acordo','n.name as Revisional','a.processo_revisional as Processo_Revisional','o.name as Cessão_de_Crédito','p.name as Embargos','a.processo_embargos as Processos_Embargos','a.data_acordo as Data_Acordo','q.name as Existencia_de_Garantia','a.ident_bem as Identificação_Garantia','a.active as Ativo')
->orderBy('a.modified','desc')
->limit(5000)
->get();
Após armazenar os dados na variavel $exec, eu sigo com a função de exportação do PHPExcel.
$array_colunas = Request::get('colunas'); // recebe as colunas que o usuário selecionou
Excel::create('Resultado Busca avançada', function($excel) use($array_colunas, $exec)
{
$excel->sheet('Resultado Busca avançada', function($sheet) use($array_colunas, $exec)
{
$sheet->row(1, $array_colunas); // insere a primeira linha com os nomes das colunas
$cont = 1;
foreach ($exec as $key => $val) // inicia foreach com os dados do meu select
{
$cont = $cont+1;
$valores = array();
for ($i=0; $i < count($array_colunas); $i++) // inicia um for em cima da qtd de colunas que ususario selecionou
{
$valores[] = $val->$array_colunas[$i]; // armazena na variavel array $valores o resultado de cada coluna que o usuario selecionou
}
$sheet->row($cont, $valores); // insere na linha do arquivo os valores
}
});
})->export('xlsx');
Caso alguém já tenha passado por isso ou conheça uma outra forma de executar essa ação de uma forma mais otimizada, fico no aguardo.Discussão (3)
Carregando comentários...