Gerando arquivos excel — Laravel Excel

Image Gerando arquivos excel — Laravel Excel

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:

  • Exportar arquivos direto do HTML
  • Exporte facilmente coleções para o Excel.
  • Importe dados do excel para coleções.
  • Exportar para PDF, HTML e outros
  • 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.

    #XLSX

    (new InvoicesExport)->download('customers.xlsx', \Maatwebsite\Excel\Excel::XLSX);1

    #CSV

    (new InvoicesExport)->download('customers.csv', \Maatwebsite\Excel\Excel::CSV);

    #TSV

    (new InvoicesExport)->download('customers.tsv', \Maatwebsite\Excel\Excel::TSV);1

    #ODS

    (new InvoicesExport)->download('customers.ods', \Maatwebsite\Excel\Excel::ODS);

    #XLS

    (new InvoicesExport)->download('customers.xls', \Maatwebsite\Excel\Excel::XLS);

    #HTML

    (new InvoicesExport)->download('customers.html', \Maatwebsite\Excel\Excel::HTML);

    #MPDF

    (new InvoicesExport)->download('customers.pdf', \Maatwebsite\Excel\Excel::MPDF);

    #DOMPDF

    (new InvoicesExport)->download('customers.pdf', \Maatwebsite\Excel\Excel::DOMPDF);

    #TCPDF

    (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);
            },
        ];
    }


    image-alt40


    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