mutu-rsab/app/Exports/DashboardDemografiExport.php

86 lines
2.5 KiB
PHP

<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class DashboardDemografiExport implements FromArray, WithStyles
{
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function array(): array
{
return array_map(fn($d) => $d['row'], $this->data);
}
public function styles(Worksheet $sheet)
{
foreach ($this->data as $index => $item) {
$rowNumber = $index + 1;
$rowType = $item['type'];
switch ($rowType) {
case 'title':
$sheet->getStyle("A{$rowNumber}")
->applyFromArray([
'font' => [
'bold' => true,
'size' => 14,
]
]);
break;
case 'header':
$sheet->getStyle("A{$rowNumber}:C{$rowNumber}")
->applyFromArray([
'font' => [
'bold' => true,
'size' => 12
],
'fill' => [
'fillType' => 'solid',
'color' => ['rgb' => 'FFFF99']
]
]);
break;
case 'body':
$sheet->getStyle("A{$rowNumber}:C{$rowNumber}")
->applyFromArray([
'font' => [
'size' => 11
]
]);
break;
}
}
// APPLY BORDER HANYA UNTUK ROW NON-EMPTY
foreach ($this->data as $i => $item) {
if ($item['type'] === 'empty') continue; // ❌ skip border
$row = $i + 1;
$sheet->getStyle("A{$row}:C{$row}")
->applyFromArray([
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['rgb' => '000000']
]
]
]);
}
return [];
}
}