Как перейти с 2.x на 3.x в maatwebsite / excel? - PullRequest
1 голос
/ 24 мая 2019

Я перенес свое приложение на laravel 5.7.При установке пакетов в composer.json я обновил с «maatwebsite / excel: ~ 2.1.0» до «maatwebsite / excel»: «^ 3.1». Так что теперь моя функция экспорта больше не работает. Я пытался выполнить обновление в https://docs.laravel -excel.com / 3.1 , но у меня не получилось. Это старый код, который работал в старой версии:

$claim = Claim::all();
$count = Claim::count();
$name = 'Liste réclamations '.date('d-m-Y H-i');
    Excel::create($name, function($excel) use($claim, $count) {

        $excel->sheet('Sheetname', function($sheet) use($claim, $count) {

            $i = 2;
            $rows = $count;
            $rows++;

            $sheet->setHeight(1, 25);
            $sheet->setAutoSize(true);
            $sheet->setBorder('A1:AH'.$rows, 'thin');

            $sheet->row(1, array(

                'Utilisateur',
                'Référence',
                'Infraction',
                'Groupe oiseaux',
                "Type de braconnage",
                "Type de l'espèce",
                "Nom de l'espèce",
                "Autre info de l'espèce",
                "Description de l'oiseau",
                "Le nombre d'oiseau",
                "Le nombre d'oiseaux mis en vente",
                "Prix de vente",
                "Lieu de la vente",
                "Nombre d'oiseaux détenus",
                "Interdiction de la chasse",
                "Présence des forces de l'ordre",
                "Contact des autorités compétentes",
                'Liste des autorités compétentes',
                "Intervention immédiate",
                "Type d'intervention",
                "L'objectif de la détention",
                "Autre objectif",
                "Indications sur l'état de l'oiseau",
                "Autre indication",
                "Lieu de l'infraction",
                "Gouvernorat de l'infraction",
                "Latitude",
                "Longitude",
                "Date de l'infraction",
                "L'heure de l'infraction",
                "Description de l'infraction",
                "Etat",
                "Date de création"

            ))->cells('A1:AH1', function($cells) {

                $cells->setBackground('#1E86CF');
                $cells->setFont(array(
                    'family'     => 'Calibri',
                    'size'       => '12',
                    'bold'       =>  true
                ));
                $cells->setFontColor('#ffffff');

            });

            foreach ($claim as $key => $claim) {

                $braconnage = '';
                $contact= '' ;

                $braconnage_link = Claimtypelink::where('claim_id',$claim->id)->with('claimbrac')->get();
                $contact_link = Claimcontactlink::where('claim_id',$claim->id)->with('claimcontactaut')->get();

                if(isset($braconnage_link)){
                    foreach ($braconnage_link as $key => $value) {
                        $braconnage = $braconnage.$value->claimbrac['title_fr'].' | ';
                    }
                }

                if(isset($contact_link)){
                    foreach ($contact_link as $key => $value) {
                        $contact = $contact.$value->claimcontactaut['title_fr'].' | ';
                    }
                }                       

                $sheet->row($i, array(

                    $claim->user['name'], 
                    $claim->reference,
                    $claim->name_infraction,
                    $claim->group_oiseau,
                    $braconnage,
                    $claim->type_espece,
                    $claim->bird['title_fr'],
                    $claim->type_espece_other,
                    $claim->description_oiseau,
                    $claim->num_espece,
                    $claim->num_espece_vente,
                    $claim->prix_vente,
                    $claim->lieu_vente,
                    $claim->num_espece_detenu,
                    $claim->interdiction_chasse,
                    $claim->presence_ordre,
                    $claim->contact_autorite,
                    $contact,
                    $claim->intervention_immediate,
                    $claim->type_intervention,
                    $claim->objectif_detention,
                    $claim->objectif_detention_other,
                    $claim->indication_etat_oiseau,
                    $claim->indication_etat_oiseau_other,
                    $claim->lieu_infraction,
                    $claim->governorate['title_fr'],
                    $claim->latitude,
                    $claim->longitude,
                    $claim->date_infraction,
                    $claim->time_infraction,
                    $claim->description_infraction,
                    $claim->etat,
                    $claim->created_at

                ));

                $i++;
            }    

        });

    })->download('xls');

1 Ответ

3 голосов
/ 28 мая 2019

Я воссоздал пример вашего проекта, чтобы выполнить эту работу: Следуйте инструкциям для реализации точно так же, как я:

  1. Установочный пакет:
composer require maatwebsite/excel
Теперь выполните следующую команду:
php artisan make:export ClaimsExport --model=Claim
Это создаст app / Exports / ClaimsExport.php .Вставьте следующий код:
<?php

namespace App\Exports;

use App\Claim;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use Maatwebsite\Excel\Concerns\WithEvents;
use PhpOffice\PhpSpreadsheet\Style\Border;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\FromCollection;

class ClaimsExport implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents, WithMapping
{
    //
    public function headings(): array
    {
        return [
            'Utilisateur',
            'Référence',
            'Infraction',
            'Groupe oiseaux',
            "Type de braconnage",
            "Type de l'espèce",
            "Nom de l'espèce",
            "Autre info de l'espèce",
            "Description de l'oiseau",
            "Le nombre d'oiseau",
            "Le nombre d'oiseaux mis en vente",
            "Prix de vente",
            "Lieu de la vente",
            "Nombre d'oiseaux détenus",
            "Interdiction de la chasse",
            "Présence des forces de l'ordre",
            "Contact des autorités compétentes",
            'Liste des autorités compétentes',
            "Intervention immédiate",
            "Type d'intervention",
            "L'objectif de la détention",
            "Autre objectif",
            "Indications sur l'état de l'oiseau",
            "Autre indication",
            "Lieu de l'infraction",
            "Gouvernorat de l'infraction",
            "Latitude",
            "Longitude",
            "Date de l'infraction",
            "L'heure de l'infraction",
            "Description de l'infraction",
            "Etat",
            "Date de création",
        ];
    }

    //
    public function collection()
    {
        return Claim::with('user')->get();
    }

    //
    public function map($claim): array
    {
        // TODO: following two lines are fake data for visualisation
        $braconnage = 'A|B';
        $contact = 'C|D';

        // TODO: Implement this
//        $braconnage_link = Claimtypelink::where('claim_id', $claim->id)->with('claimbrac')->get();
//        $contact_link = Claimcontactlink::where('claim_id', $claim->id)->with('claimcontactaut')->get();

        if (isset($braconnage_link)) {
            foreach ($braconnage_link as $key => $value) {
                $braconnage = $braconnage . $value->claimbrac['title_fr'] . ' | ';
            }
        }

        if (isset($contact_link)) {
            foreach ($contact_link as $key => $value) {
                $contact = $contact . $value->claimcontactaut['title_fr'] . ' | ';
            }
        }

        return [
            $claim->user['name'],
            $claim->reference,
            $claim->name_infraction,
            $claim->group_oiseau,
            $braconnage,
            $claim->type_espece,
            $claim->bird['title_fr'],
            $claim->type_espece_other,
            $claim->description_oiseau,
            $claim->num_espece,
            $claim->num_espece_vente,
            $claim->prix_vente,
            $claim->lieu_vente,
            $claim->num_espece_detenu,
            $claim->interdiction_chasse,
            $claim->presence_ordre,
            $claim->contact_autorite,
            $contact,
            $claim->intervention_immediate,
            $claim->type_intervention,
            $claim->objectif_detention,
            $claim->objectif_detention_other,
            $claim->indication_etat_oiseau,
            $claim->indication_etat_oiseau_other,
            $claim->lieu_infraction,
            $claim->governorate['title_fr'],
            $claim->latitude,
            $claim->longitude,
            $claim->date_infraction,
            $claim->time_infraction,
            $claim->description_infraction,
            $claim->etat,
            $claim->created_at,
        ];
    }

    //
    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function (AfterSheet $event) {
                $styleArray = [
                    'font' => [
                        'bold' => true,
                        'size' => 12,
                        'name' => 'Calibri',
                        'color' => ['argb' => 'FFFFFFFF'],
                    ],
                    'borders' => [
                        'outline' => [
                            'borderStyle' => Border::BORDER_THIN,
                        ],
                    ],
                    'fill' => [
                        'fillType' => Fill::FILL_SOLID,
                        'startColor' => [
                            'argb' => 'FF1E86CF',
                        ],
                    ],
                ];

                $event->sheet->getDelegate()->getStyle('A1:AG1')->applyFromArray($styleArray);
            },
        ];
    }
}
  • Там вы найдете TODO.Попробуйте реализовать это самостоятельно.Я не знаю, что делают Claimtypelink и Claimcontactlink.

  • Теперь внутри контроллера добавьте следующий метод:
public function export()
{
    $name = 'Liste réclamations ' . date('d-m-Y H-i') . '.xlsx';

    return Excel::download(new ClaimsExport, $name);
}

и добавьте его в начало этого файла:

use App\Exports\ClaimsExport;
use Maatwebsite\Excel\Facades\Excel;
Внутри маршрутов добавьте:
Route::get('claims/export', 'ClaimController@export')->name('export');

и все готово.

...