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 []; } }