wsData = $wsData; $this->emisiData = $emisiData; } public function view(): View { return view('modules.reports.worksheet.report', [ 'wsData' => $this->wsData, 'emisiData' => $this->emisiData, 'isExport' => true ]); } public function styles(Worksheet $sheet) { // Apply styles to the header rows $tableStartRow = 6; $tableHeaderRow = $tableStartRow + ($this->wsData->ws_header - 1); $tableEndRow = $sheet->getHighestRow(); $columnStart = 'A'; $columnEnd = $sheet->getHighestColumn(); $sheet->getStyle('A1:A3')->applyFromArray([ 'font' => ['bold' => true], 'alignment' => ['horizontal' => Alignment::HORIZONTAL_LEFT], ]); $sheet->mergeCells('A1:' . $columnEnd . '1'); $sheet->mergeCells('A2:' . $columnEnd . '2'); $sheet->mergeCells('A3:' . $columnEnd . '3'); // Apply table header styles $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableHeaderRow)->applyFromArray([ 'font' => ['bold' => true], 'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER], ]); // Apply borders to the entire table $sheet->getStyle($columnStart . $tableStartRow . ':' . $columnEnd . $tableEndRow)->applyFromArray([ 'borders' => [ 'allBorders' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, 'color' => ['argb' => 'FF000000'], ], ], ]); // Set dynamic column styles based on data foreach ($sheet->getRowIterator() as $row) { $rowIndex = $row->getRowIndex(); // Skip the header rows if ($rowIndex >= $tableStartRow && $rowIndex <= $tableHeaderRow) { continue; } foreach ($row->getCellIterator() as $cell) { $value = $cell->getValue(); $formatCode = NumberFormat::FORMAT_GENERAL; // Check if value is numeric if (is_numeric($value)) { $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); // Apply number formatting // $cell->setValue($value); $formatCode = floor($value) != $value ? '#,##0.0###' : '#,##0'; $cell->getStyle()->getNumberFormat()->setFormatCode($formatCode); } else { $cell->getStyle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_LEFT); } } } // Style footer row // $footerRowStyle = $sheet->getStyle($columnStart . $tableEndRow . ':' . $columnEnd . $tableEndRow); // $footerRowStyle->applyFromArray([ // 'font' => ['bold' => true], // ]); // $sheet->getStyle($columnStart . $tableEndRow)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); // Auto-fit columns foreach (range('A', $sheet->getHighestColumn()) as $col) { $sheet->getColumnDimension($col)->setAutoSize(true); } return []; } }