Como gerar Excel com Laravel 10
Neste tutorial, será apresentado como gerar Excel com Laravel 10.
Primeiramente, será demonstrado como realizar pesquisas no banco de dados com Laravel.
Em seguida, será explicado como converter caracteres especiais para gerar Excel.
Por fim, será mostrado como gerar Excel com Laravel e forçar o download do arquivo.
Download do código fonte desenvolvido na aula: Download
Curso de Laravel: Mais Detalhes do Curso
Playlist completa sobre Laravel: Acessar
Receber as aulas gratuitas do curso de Laravel: Acessar
Para começar, é utilizado como base o projeto da aula "Como incluir Select2 no formulário no Laravel 10 com Vite".
Criada a rota para gerar Excel no arquivo "routes/web.php".
Route::get('/gerar-csv-conta', [ContaController::class, 'gerarCsv'])->name('conta.gerar-csv');
Na controller "app/Http/Controllers/ContaController.php", foi criado o método "gerarCsv". No mesmo, os registros da tabela "contas" são recuperados do banco de dados, o conteúdo a ser salvo no arquivo é criado, o arquivo é gerado e o download do Excel é realizado com o Laravel.
// Gerar CSV
public function gerarCsv(Request $request)
{
// Recuperar e pesquisar os registros do banco dados
$contas = Conta::when($request->has('nome'), function ($whenQuery) use ($request) {
$whenQuery->where('nome', 'like', '%' . $request->nome . '%');
})
->when($request->filled('data_inicio'), function ($whenQuery) use ($request) {
$whenQuery->where('vencimento', '>=', \Carbon\Carbon::parse($request->data_inicio)->format('Y-m-d'));
})
->when($request->filled('data_fim'), function ($whenQuery) use ($request) {
$whenQuery->where('vencimento', '<=', \Carbon\Carbon::parse($request->data_fim)->format('Y-m-d'));
})
->with('situacaoConta')
->orderBy('vencimento')
->get();
// Calcular a soma total dos valores
$totalValor = $contas->sum('valor');
// Criar o arquivo temporário
$csvNomeArquivo = tempnam(sys_get_temp_dir(), 'csv_' . Str::ulid());
// Abrir o arquivo na forma de escrita
$arquivoAberto = fopen($csvNomeArquivo, 'w');
// Criar o cabeçalho do Excel - Usar a função mb_convert_encoding para converter carateres especiais
$cabecalho = ['id', 'Nome', 'Vencimento', mb_convert_encoding('Situação', 'ISO-8859-1', 'UTF-8'), 'Valor'];
// Escrever o cabeçalho no arquivo
fputcsv($arquivoAberto, $cabecalho, ';');
// Ler os registros recuperados do banco de dados
foreach($contas as $conta){
// Criar o array com os dados da linha do Excel
$contaArray = [
'id' => $conta->id,
'nome' => mb_convert_encoding($conta->nome, 'ISO-8859-1', 'UTF-8'),
'vencimento' => $conta->vencimento,
'situacao' => mb_convert_encoding($conta->situacaoConta->nome, 'ISO-8859-1', 'UTF-8'),
'valor' => number_format($conta->valor, 2, ',', '.'),
];
// Escrever o conteúdo no arquivo
fputcsv($arquivoAberto, $contaArray, ';');
}
// Criar o rodapé do Excel
$rodape = ['', '', '', '', number_format($totalValor, 2, ',', '.')];
// Escrever o conteúdo no arquivo
fputcsv($arquivoAberto, $rodape, ';');
// Fechar o arquivo após a escrita
fclose($arquivoAberto);
// Realizar o download do arquivo
return response()->download($csvNomeArquivo, 'relatorio_contas_celke_' . Str::ulid() . '.csv');
}
Para finalizar, é criado o botão gerar Excel na view "resources/views/contas/index.blade.php".
<a href="{{ url('gerar-csv-conta?' . request()->getQueryString()) }}" class="btn btn-success btn-sm">Gerar Excel</a>
Baixar o código-fonte completo do projeto.
Bom, era isso. Espero que o tutorial tenha sido útil!