May 14, 2022
0
Level 1
Formatted exported excel file on laravel excel based on yajra datatable
Hello guys!
I use the maatwebsite/excel package (or laravel excel) to produce excel files from yajra datatables. The export is successful, I partially succeeding in formatting it based on cobbled answer from internet.
My exports file (D:\apache24\htdocs\possmt\app\Exports\ProductCategoriesExport .php) is the following:
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStyles;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Yajra\DataTables\Exports\DataTablesCollectionExport;
class ProductCategoriesExport extends DataTablesCollectionExport
implements ShouldAutoSize, WithMapping, WithHeadings, WithStyles, WithEvents
{
public function headings(): array
{
return [
'No',
'Category Code',
'Category Name',
'Created At',
];
}
public function map($row): array
{
// TODO: Implement map() method.
return [
$row['DT_RowIndex'],
$row['category_code'],
$row['category_name'],
$row['created_at'],
];
}
public function styles(Worksheet $sheet)
{
// TODO: Implement styles() method.
return [
'A' => [
'alignment' => [
'wrapText' => true,
],
],
'B' => [
'alignment' => [
'wrapText' => true,
],
],
'C' => [
'alignment' => [
'wrapText' => true,
],
],
'D' => [
'alignment' => [
'wrapText' => true,
],
],
];
}
public function registerEvents(): array
{
// TODO: Implement registerEvents() method.
$styleArray = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
],
],
];
$styleArray1 = [
'font' => [
'bold' => true,
],
];
$styleArray2 = array(
'alignment' => array(
'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
)
);
$styleArray3 = array(
'alignment' => array(
'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
)
);
return [
AfterSheet::class => function(AfterSheet $event)
use ($styleArray, $styleArray1, $styleArray2, $styleArray3)
{
$cellRange = 'A1:D1';
$event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(12);
$event->sheet->getDelegate()->getColumnDimension('A')->setWidth(5);
$event->sheet->getDelegate()->getColumnDimension('B')->setWidth(20);
$event->sheet->getDelegate()->getColumnDimension('C')->setWidth(34);
$event->sheet->getDelegate()->getColumnDimension('D')->setWidth(23);
$event->sheet->getDelegate()->getStyle($cellRange)->ApplyFromArray($styleArray1);
$event->sheet->getDelegate()->getStyle($cellRange)->ApplyFromArray($styleArray2, $styleArray3);
$event->sheet->getDelegate()->getStyle('A:A')->ApplyFromArray($styleArray2);
$event->sheet->getDelegate()->getStyle('B:B')->ApplyFromArray($styleArray2);
$event->sheet->getDelegate()->getStyle('D:D')->ApplyFromArray($styleArray2);
$event->sheet->getDelegate()->getStyle('A:A')->ApplyFromArray($styleArray3);
$event->sheet->getDelegate()->getStyle('B:B')->ApplyFromArray($styleArray3);
$event->sheet->getDelegate()->getStyle('D:D')->ApplyFromArray($styleArray3);
}
];
}
}
My question is it possible to set border->allBorders->borderStyle->thin to just data row from yajra datatable ?
Please or to participate in this conversation.