Laravel Excel по центру по вертикали

Как я могу выровнять по центру ячейки по центру с помощью Excel?

Мой код:

$sheet->cells('A1:'.$column_end.$i, function ($cells) {
                $cells->setBackground('#d8d8d8');
                $cells->setFontWeight('bold');
                $cells->setValignment('middle');
            });

Но это не работает, большинство моих ячеек расположены вертикально внизу.

Может быть, это не середина!

Я попробовал "центр", но это не сработало. Когда я пытался "сверху" или "снизу", это работало.

Так почему "середина" или "центр" не сделали?

Спасибо за помощь.

5 ответов

Решение

Согласно документации Laravel Excel, это должно быть:

$cells->setValignment('center');

Как вы упомянули...

Попробуйте в качестве теста, setAlignment('center')Согласно ему, поведение должно быть таким же, но для горизонтального. Если этот работает, то другой должен точно.

У меня была такая же проблема, и мне пришлось немного покопаться, чтобы понять, как это работает, и разобрался, поэтому я решил оставить здесь комментарий на случай, если кто-то еще наткнется на эту тему

Laravel Excel использует phpspreadsheet и предлагает простой интерфейс Larave и логику для работы с ним, но без особых пояснений, поэтому, прежде всего, вот рабочий код (в Exports\MyExportClassExport.php):

/**
     * @return array
     */
    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $event->sheet->getDelegate()->getStyle('A2:W2')->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);
            },
        ];
    }

Но как это работает и почему?

Чтобы иметь полный контроль над электронной таблицей и всеми действительно полезными компонентами Phpspreadsheet, Laravel-excel позволяет вам взаимодействовать с серией событий, поэтому мы используем событие AfterSheet, которое запускается после того, как что-либо было создано. Я не эксперт ни в phpspreadsheet, ни в Laravel Excel, так что, возможно, кто-то может предложить лучшее мероприятие для того, что я делаю, в любом случае это работает.

Теперь у нас есть доступ к AfterSheet с закрытием с помощью переменной $event, и мы можем получить доступ к двум различным свойствам: листу и экспортируемому (см. Класс AfterSheet), и мы получаем из свойства листа (которое является объектом Sheet) делегат с помощью getDelegate(), и вот важная часть. Сейчас мы работаем с классом Worksheet из Phpspreadsheet!

так что с этого момента мы просто следуем документации для Phpspreadsheet и можем работать над кодом, как захотим!

Я надеюсь, что это помогло или, по крайней мере, поможет кому-то, кто, как и я, столкнулся с этой темой без правдивого ответа.

Попробуй это

$sheet->cell('A1:G1',function($cell){ $cell->setAlignment('center'); $cell->setFontWeight('bold'); });

Попробуй это. Это работает для меня. Выравнивание по диапазону

      $range = 'A2:A10';
$style = [
    'alignment' => [
        'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
        'wrapText' => true,
    ],
];
$sheet->getStyle($range)->applyFromArray($style);

В Laravel 9 и Laravel Excel 3.1.

      public function styles(Worksheet $sheet)
    {
        return [
            // Style the first row as text center.
            1    => [
                'alignment' => [
                    'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
                    'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
                    'wrapText' => true,
                ]
            ]
        ];
    }

Другие вопросы по тегам