Laravel excel добавляет сложные заголовки в экспорт

#laravel-5 #maatwebsite-excel #laravel-excel

Вопрос:

Мне нужно экспортировать лист со сложным заголовком через Laravel Excel. Мне нужен основной заголовок и еще один заголовок подуровня после.

введите описание изображения здесь

Я пытаюсь вот так,

 use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithHeadings;

class InvoicesExport implements FromQuery, WithHeadings
{   
    public function headings(): array
    {
        return [
            'Account 1' =>[
                "Account 1 id",
                "Account 1 branch"  
            ],
            'Account 2' =>[
                "Account 2 id",
                "Account 2 branch"  
            ],
        ];
    }
}
 

Но получение столбцов заголовка, таких как [ «Идентификатор учетной записи 1», «Филиал учетной записи 1» ]

есть ли способ заархивировать эту задачу?

Ответ №1:

Наконец, мне удалось это сделать. Добавляю его, так как это будет полезно для кого-то другого.

 use MaatwebsiteExcelConcernsFromQuery;
use MaatwebsiteExcelConcernsWithHeadings;
use MaatwebsiteExcelConcernsWithCustomStartCell;
use MaatwebsiteExcelEventsAfterSheet;
use MaatwebsiteExcelConcernsWithEvents;
use MaatwebsiteExcelSheet;

class InvoicesExport implements FromCollection, WithHeadings, WithCustomStartCell, WithEvents{ 

    public function startCell(): string
    {
        return 'A2';
    }

    public function registerEvents(): array {
        
        return [
            AfterSheet::class => function(AfterSheet $event) {
                /** @var Sheet $sheet */
                $sheet = $event->sheet;

                $sheet->mergeCells('A1:B1');
                $sheet->setCellValue('A1', "Account 1");

                $sheet->mergeCells('C1:D1');
                $sheet->setCellValue('C1', "Account 2");
                
                $styleArray = [
                    'alignment' => [
                        'horizontal' => PhpOfficePhpSpreadsheetStyleAlignment::HORIZONTAL_CENTER,
                    ],
                ];
                
                $cellRange = 'A1:D1'; // All headers
                $event->sheet->getDelegate()->getStyle($cellRange)->applyFromArray($styleArray);
            },
        ];
    }
      
    public function headings(): array
    {
        return [
                "Account 1 id",
                "Account 1 branch"  
                "Account 2 id",
                "Account 2 branch"  
        ];
    }
}
 

Хи, я добавил startCell (), чтобы начать со второго ряда. registerEvents() для объединения и выравнивания по центру ячеек первой строки с содержимым.