Files
onboard/app/Exports/Sheets/ArraySheetExport.php
brusnitsyn fd0e6ee817 Добавлено формирование отчета
И индикатор реанимации
2026-04-24 16:44:58 +09:00

93 lines
3.0 KiB
PHP

<?php
namespace App\Exports\Sheets;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithStyles;
use Maatwebsite\Excel\Concerns\WithTitle;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\Style\Fill;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class ArraySheetExport implements FromArray, WithTitle, WithStyles, ShouldAutoSize
{
public function __construct(
private readonly string $sheetTitle,
private readonly array $rows
) {}
public function array(): array
{
return $this->rows;
}
public function title(): string
{
return $this->sheetTitle;
}
public function styles(Worksheet $sheet): array
{
$sheet->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4);
$sheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
$sheet->getPageSetup()->setFitToPage(true);
$sheet->getPageSetup()->setFitToWidth(1);
$sheet->getPageSetup()->setFitToHeight(0);
$sheet->getPageMargins()->setTop(0.2);
$sheet->getPageMargins()->setBottom(0.2);
$sheet->getPageMargins()->setLeft(0.2);
$sheet->getPageMargins()->setRight(0.2);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$sheet->getStyle("A1:{$highestColumn}{$highestRow}")->applyFromArray([
'alignment' => [
'horizontal' => Alignment::HORIZONTAL_LEFT,
'vertical' => Alignment::VERTICAL_CENTER,
'wrapText' => true,
],
'borders' => [
'allBorders' => [
'borderStyle' => Border::BORDER_THIN,
'color' => ['argb' => 'D0D7DE'],
],
],
]);
$sheet->getStyle("A1:{$highestColumn}1")->applyFromArray([
'font' => [
'bold' => true,
],
'fill' => [
'fillType' => Fill::FILL_SOLID,
'startColor' => ['argb' => 'EEF2FF'],
],
]);
for ($row = 1; $row <= $highestRow; $row++) {
$firstCell = (string) $sheet->getCell("A{$row}")->getValue();
$secondCell = (string) $sheet->getCell("B{$row}")->getValue();
// Строки секций (МИС / Спец. контингент)
if (in_array($firstCell, ['МИС', 'Спец. контингент'], true) && $secondCell === '') {
$sheet->getStyle("A{$row}:{$highestColumn}{$row}")->applyFromArray([
'font' => ['bold' => true],
'fill' => [
'fillType' => Fill::FILL_SOLID,
'startColor' => ['argb' => 'F4F6F8'],
],
]);
}
}
$sheet->freezePane('A2');
return [];
}
}