load($inputFileName); $sheet = $spreadsheet->getActiveSheet(); $sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE); $i = 3; $first = true; $from = '-'; $prevInstDate = ''; $j = 1; foreach ($schedules as $schedule) { if($first) { $first = false; $from = $schedule->installation_date; $prevInstDate = $schedule->installation_date; } elseif($prevInstDate === $schedule->installation_date) { $j++; } else { if($j > 1) { $sheet->mergeCells('A' . $i - $j . ':A' . $i - 1); $sheet->mergeCells('B' . $i - $j . ':B' . $i - 1); } $j = 1; $prevInstDate = $schedule->installation_date; } $sheet->setCellValue('A' . $i, DateHelper::getHumanDayOfWeek($schedule->installation_date)); $sheet->setCellValue('B' . $i, DateHelper::getHumanDate($schedule->installation_date, true)); $sheet->setCellValue('C' . $i, $schedule->address_code); $sheet->setCellValue('D' . $i, $schedule->district->shortname); $sheet->setCellValue('E' . $i, $schedule->area->name); $sheet->setCellValue('F' . $i, $schedule->object_address); $sheet->setCellValue('G' . $i, $schedule->object_type); $sheet->setCellValue('H' . $i, Str::trim($schedule->mafs)); $sheet->setCellValue('I' . $i, $schedule->mafs_count); $sheet->setCellValue('J' . $i, $schedule->brigadier->name); $sheet->setCellValue('K' . $i, $schedule->comment); $sheet->getStyle('C' . $i . ':K' . $i)->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB(Str::replace('#', '', $schedule->brigadier->color)); $i++; } // merge last cells if $j > 1 if($j > 1) { $sheet->mergeCells('A' . $i - $j . ':A' . $i - 1); $sheet->mergeCells('B' . $i - $j . ':B' . $i - 1); } $sheet->getStyle('A2:B' . $i -1)->getAlignment()->setTextRotation(90); $sheet->getStyle('A2:K' . $i - 1)->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN)->setColor(new Color('777777')); $sheet->getStyle('A2:K' . $i - 1)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $sheet->getStyle('C2:K' . $i - 1)->getAlignment()->setWrapText(true); $fromText = (DateHelper::isDate($from)) ? DateHelper::getHumanDate($from) : '-'; $toText = (isset($schedule) && $schedule->installation_date) ? DateHelper::getHumanDate($schedule->installation_date) : '-'; $header = 'График монтажей с ' . $fromText . ' по ' . $toText; $sheet->setCellValue('A1', $header); $sheet->getStyle('A1')->getFont()->setBold(true); $fileName = $header . '.xlsx'; $writer = new Xlsx($spreadsheet); $fd = 'export/schedule/tmp'; Storage::disk('public')->makeDirectory($fd); $fp = storage_path('app/public/export/schedule/') . '/tmp/' . $fileName; Storage::disk('public')->delete($fd . '/' . $fileName); $writer->save($fp); PdfConverterClient::convert($fp); // create zip archive $fileModel = (new FileService())->createZipArchive($fd, Str::replace('.xlsx', '.zip', $fileName), $userId); // remove temp files Storage::disk('public')->deleteDirectory($fd); // return link return $fileModel?->link ?? ''; } }