Gerando arquivos excel — Laravel Excel
- Erick Giorgio
- 31 Dec 2022

Tem uma sintaxe muito simples. Ele tirou todo o código ‘repetitivo’que era necessário para criar exportações com PHPExcel.
Alem disso ele permite:
Installation
Para instalar rode o comando.
$ composer require maatwebsite/excel
Adicionar ServiceProvider emconfig/app.php
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
Adicionar o Facade emconfig/app.php
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
E publicar as configurações
$ php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
Ira criar um novo arquivo de configurações config/excel.php.
Exportando de HTML / Blade
Vamos imaginar que você já tenha uma página de lista com tabela HTML:
E aqui está o código Blade — resources/views/customers/table.blade.php :
<table class="table">
<thead>
<tr>
<th></th>
<th>Nome</th>
<th>Email</th>
<th>Data criação</th>
<th>Data Atualização </th>
</tr>
</thead>
<tbody>
@foreach ($customers as $customer)
<tr>
<td>{{ $customer->id }}</td>
<td>{{ $customer->nome }}</td>
<td>{{ $customer->email }}</td>
<td>{{ $customer->created_at }}</td>
<td>{{ $customer->updated_at }}</td>
</tr>
@endforeach
</tbody>
</table>
Você pode reutilizá-lo para exportar a mesma tabela para o Excel.
$ php artisan make:export CustomersFromView --model=Customer
Use o FromView para executar a operação.
Exportar para PDF, HTML e outros
Embora o pacote seja chamado de Laravel Excel, ele fornece exportação para mais formatos. É simples de usar, adicione mais um parâmetro à classe:
return Excel::download(new CustomersExport(), 'customers.xlsx', 'Html');
Por padrão o formato de exportação é determinado pela extensão.
(new InvoicesExport)->download('customers.xlsx', \Maatwebsite\Excel\Excel::XLSX);1
(new InvoicesExport)->download('customers.csv', \Maatwebsite\Excel\Excel::CSV);
(new InvoicesExport)->download('customers.tsv', \Maatwebsite\Excel\Excel::TSV);1
(new InvoicesExport)->download('customers.ods', \Maatwebsite\Excel\Excel::ODS);
(new InvoicesExport)->download('customers.xls', \Maatwebsite\Excel\Excel::XLS);
(new InvoicesExport)->download('customers.html', \Maatwebsite\Excel\Excel::HTML);
(new InvoicesExport)->download('customers.pdf', \Maatwebsite\Excel\Excel::MPDF);
(new InvoicesExport)->download('customers.pdf', \Maatwebsite\Excel\Excel::DOMPDF);
(new InvoicesExport)->download('customers.pdf', \Maatwebsite\Excel\Excel::TCPDF);
Aviso: você também terá que instalar um pacote PDF escolhido via compositor, como:
composer require dompdf/dompdf
Formatar células, no entanto, você deseja
Por exemplo alterar a cor de parte do documento Veja como usá-lo na classe Laravel Export, como no exemplo: app/Exports/CustomersExportStyling.php :
/**
* @return array
*/
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
// All headers - set font size to 14
$cellRange = 'A1:W1';
$event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
// Apply array of styles to B2:G8 cell range
$styleArray = [
'borders' => [
'outline' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
'color' => ['argb' => 'FFFF0000'],
]
]
];
$event->sheet->getDelegate()->getStyle('B2:G8')->applyFromArray($styleArray);
// Set first row to height 20
$event->sheet->getDelegate()->getRowDimension(1)->setRowHeight(20);
// Set A1:D4 range to wrap text in cells
$event->sheet->getDelegate()->getStyle('A1:D4')
->getAlignment()->setWrapText(true);
},
];
}

Fórmulas
Por alguma razão, a documentação oficial do pacote do Laravel Excel não menciona nada sobre fórmulas. Mas esse é o ponto inteiro de usar o Excel!
Felizmente, é fácil escrever fórmulas em nosso arquivo exportado. Precisamos definir valores de célula como gostaríamos no Excel, por exemplo, = A2 + 1 ou SUM (A1: A10) .
Uma das maneiras de fazer isso é usar o WithMapping :
<?php
namespace App\Exports;
use App\Customer;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithMapping;
class CustomersExportFormulas implements FromCollection, WithMapping
{
public function collection()
{
return Customer::all();
}
/**
* @var Customer $customer
* @return array
*/
public function map($customer): array
{
return [
$customer->id,
'=A2+1',
$customer->first_name,
$customer->last_name,
$customer->email,
];
}
}
Estes são alguns dos recursos desta ferramenta. Para encontrar mais sobre