Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

freedomace's avatar

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 ?

0 likes
0 replies

Please or to participate in this conversation.