Here is the example of export multiple columns with dropdown list from datalist taken from table and header having styling like bold and background color.
<?php
namespace App\Exports;
use App\Category;
use App\Product;
use App\SKU;
use App\Tra_Tax;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class ProductExport implements FromCollection, WithHeadings, WithEvents, WithStrictNullComparison, WithStyles
{
/**
* @return \Illuminate\Support\Collection
*/
protected $results;
public function collection()
{
$user = Auth::user();
if($user->type=="staff"){
$this->id = $user->created_by;
}else{
$this->id = $user->id;
}
$this->results = $this->getProducts();
return $this->results;
}
public function getProducts(){
$product = Product::select('product_name','description','category','price','sale_price','quantity','sku',
'sku_quantity','bar_code','tax','sold_by')
->where('created_by',$this->id)->where('status',1)->take(1)->get();
$product[0]->category = Category::where('id',$product[0]->category)->pluck('name')->first();
return $product;
}
public function headings(): array
{
return [
'Product Name','Description','Category','Price','Sale Price','Quantity','SKU','SKU Quantity',
'Bar Code','Tax','Sold By'
];
}
public function styles(Worksheet $sheet)
{
return [
1 => ['font' => ['bold' => true]],
];
}
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
//sheet object & no. rows
$row_count = 50;
$column_count = count($this->results[0]->toArray());
$sheet = $event->sheet;
//header color
$sheet->getDelegate()->getStyle('A1:L1')
->getFill()
->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID)
->getStartColor()
->setARGB('ADD8E6');
//category dropdown
$category = Category::where('created_by',$this->id)->pluck('name')->toArray();
$validation2 = $sheet->getCell('C2')->getDataValidation();
$validation2->setType(DataValidation::TYPE_LIST );
$validation2->setErrorStyle(DataValidation::STYLE_INFORMATION );
$validation2->setAllowBlank(false);
$validation2->setShowInputMessage(true);
$validation2->setShowErrorMessage(true);
$validation2->setShowDropDown(true);
$validation2->setErrorTitle('Input error');
$validation2->setError('Value is not in list.');
$validation2->setPromptTitle('Pick from category list');
$validation2->setPrompt('Please pick a value from the drop-down list.');
$validation2->setFormula1('"' . implode(',',$category). '"');
for ($i = 3; $i <= $row_count; $i++) {
$event->sheet->getCell("C{$i}")->setDataValidation(clone $validation2);
}
//sku dropdown
$sku = SKU::where('created_by',$this->id)->pluck('unit')->toArray();
$validation = $sheet->getCell('G2')->getDataValidation();
$validation->setType(DataValidation::TYPE_LIST);
$validation->setErrorStyle(DataValidation::STYLE_INFORMATION );
$validation->setAllowBlank(false);
$validation->setShowInputMessage(true);
$validation->setShowErrorMessage(true);
$validation->setShowDropDown(true);
$validation->setErrorTitle('Input error');
$validation->setError('Value is not in list.');
$validation->setPromptTitle('Pick from sku list');
$validation->setPrompt('Please pick a value from the drop-down list.');
$validation->setFormula1('"' . implode(',',$sku). '"');
for ($i = 3; $i <= $row_count; $i++) {
$event->sheet->getCell("G{$i}")->setDataValidation(clone $validation);
}
//tax dropdown
$tax = 'A,B,C,D,E';
$validation1 = $sheet->getCell('J2')->getDataValidation();
$validation1->setType(DataValidation::TYPE_LIST );
$validation1->setErrorStyle(DataValidation::STYLE_INFORMATION );
$validation1->setAllowBlank(false);
$validation1->setShowInputMessage(true);
$validation1->setShowErrorMessage(true);
$validation1->setShowDropDown(true);
$validation1->setErrorTitle('Input error');
$validation1->setError('Value is not in list.');
$validation1->setPromptTitle('Pick from tax list');
$validation1->setPrompt('Please pick a value from the drop-down list.');
$validation1->setFormula1('"' . $tax. '"');
for ($i = 3; $i <= $row_count; $i++) {
$event->sheet->getCell("J{$i}")->setDataValidation(clone $validation1);
}
//sold by dropdown
$sold_by ="each,weight";
$validation2 = $sheet->getCell('K2')->getDataValidation();
$validation2->setType(DataValidation::TYPE_LIST );
$validation2->setErrorStyle(DataValidation::STYLE_INFORMATION );
$validation2->setAllowBlank(false);
$validation2->setShowInputMessage(true);
$validation2->setShowErrorMessage(true);
$validation2->setShowDropDown(true);
$validation2->setErrorTitle('Input error');
$validation2->setError('Value is not in list.');
$validation2->setPromptTitle('Pick from sold by list');
$validation2->setPrompt('Please pick a value from the drop-down list.');
$validation2->setFormula1('"' . $sold_by. '"');
for ($i = 3; $i <= $row_count; $i++) {
$event->sheet->getCell("K{$i}")->setDataValidation(clone $validation2);
}
//set size of column as per the length
for ($i = 1; $i <= $column_count; $i++) {
$column = Coordinate::stringFromColumnIndex($i);
$event->sheet->getColumnDimension($column)->setAutoSize(true);
}
},
];
}
}