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,
]
]
];
}