getActiveSheet(); $sheet->setTitle('Районы'); // Заголовки $sheet->setCellValue('A1', 'ID'); $sheet->setCellValue('B1', 'Название'); $sheet->setCellValue('C1', 'Округ (сокращение)'); $sheet->setCellValue('D1', 'ID округа'); // Стиль заголовков $sheet->getStyle('A1:D1')->getFont()->setBold(true); $sheet->getStyle('A1:D1')->getFill() ->setFillType(Fill::FILL_SOLID) ->getStartColor()->setARGB('DDDDDD'); // Данные $areas = Area::with('district')->orderBy('name')->get(); $i = 2; foreach ($areas as $area) { $sheet->setCellValue('A' . $i, $area->id); $sheet->setCellValue('B' . $i, $area->name); $sheet->setCellValue('C' . $i, $area->district?->shortname ?? ''); $sheet->setCellValue('D' . $i, $area->district_id); $i++; } // Границы if ($i > 2) { $sheet->getStyle('A1:D' . ($i - 1)) ->getBorders() ->getAllBorders() ->setBorderStyle(Border::BORDER_THIN) ->setColor(new Color('777777')); } // Автоширина колонок foreach (range('A', 'D') as $col) { $sheet->getColumnDimension($col)->setAutoSize(true); } // Сохранение $fileName = 'export_areas_' . date('Y-m-d_H-i-s') . '.xlsx'; $writer = new Xlsx($spreadsheet); $fd = 'export/areas'; Storage::disk('public')->makeDirectory($fd); $fp = storage_path('app/public/' . $fd . '/') . $fileName; Storage::disk('public')->delete($fd . '/' . $fileName); $writer->save($fp); $link = url('/storage/' . $fd . '/' . $fileName); // Создаём запись в таблице files File::query()->create([ 'link' => $link, 'path' => $fp, 'user_id' => $userId, 'original_name' => $fileName, 'mime_type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', ]); return $link; } }