86 lines
2.5 KiB
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 [];
|
|
}
|
|
}
|