【问题标题】:How to upgrade from 2.x to 3.x in maatwebsite/excel?如何在 maatwebsite/excel 中从 2.x 升级到 3.x?
【发布时间】:2019-10-10 22:07:24
【问题描述】:

我将我的应用程序迁移到 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');

【问题讨论】:

    标签: laravel maatwebsite-excel


    【解决方案1】:

    我已经重新创建了您的项目示例来完成这项工作: 完全按照我的步骤执行:

    1. 安装包:
    composer require maatwebsite/excel
    
    1. 现在运行以下命令:
    php artisan make:export ClaimsExport --model=Claim
    
    1. 这将创建 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。尝试自己实现。我不知道 ClaimtypelinkClaimcontactlink 有什么作用。

      1. 现在在控制器内部添加以下方法:
    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;
    
    1. 内部路线添加:
    Route::get('claims/export', 'ClaimController@export')->name('export');
    

    你可以走了。

    【讨论】:

    • @zgabievi 也许你可以帮助我。看看这个:stackoverflow.com/questions/56522035/…
    • 抱歉,回答迟了。我没有在 excel 文件中使用分页。而且我在新文档中找不到该部分。希望你能找到答案。
    猜你喜欢
    • 1970-01-01
    • 2022-12-28
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2019-07-15
    • 2014-06-02
    相关资源
    最近更新 更多