I migrated my application to laravel 5.7.When installing the packages in the composer.json i upgraded from "maatwebsite/excel:~2.1.0" to "maatwebsite/excel": "^3.1".So now my export function does not work anymore.I tried to follow the upgrade in https://docs.laravel-excel.com/3.1 but didn't work for me.this is the old code that used to work in the old version:
$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');
I have recreated your project sample to make this work: Follow steps to implement exactly as I did:
composer require maatwebsite/excel
php artisan make:export ClaimsExport --model=Claim
<?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);
},
];
}
}
You will find TODO there. Try to implement that by yourself. I don't know what does Claimtypelink and Claimcontactlink do.
public function export()
{
$name = 'Liste réclamations ' . date('d-m-Y H-i') . '.xlsx';
return Excel::download(new ClaimsExport, $name);
}
and add this in top of that file:
use App\Exports\ClaimsExport;
use Maatwebsite\Excel\Facades\Excel;
Route::get('claims/export', 'ClaimController@export')->name('export');
and you are good to go.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With