问题描述
我使用的是 Maatwebsite Laravel-excel 3.1 版。我想设置工作表的默认样式。我已经阅读了有关通过在我的 AppServiceProvider boot() 方法中设置宏在 Laravel 应用程序中包含宏的文档。 :
Sheet::macro('getDefaultStyle',function(Sheet $sheet){
$sheet->getDefaultStyle();
});
但是,每次我重新加载页面时,它都会使页面崩溃,并且我的 cmd 中的 Laravel 服务器停止并重新运行。这是我的 Export.PHP 看起来像:
public function registerEvents():array
{
return[
AfterSheet::class=>function(AfterSheet $event){
$header_style_array = [
'font'=>['bold'=>true]
];
$style_array = [
'font'=>['bold'=>true]
];
$event->sheet->getStyle('A1:B1')->getAlignment()->setHorizontal('center');
$event->sheet->getStyle('A1:B1')->applyFromArray($header_style_array);
$event->sheet->getDefaultStyle()->getFont()->setSize(5);
}];
}
我已经在 Export.PHP 文件上方包含了 use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Events\AfterSheet;
。
有什么我错过的吗?我觉得这很难设置。很少有文章介绍如何设置。
任何帮助将不胜感激 参考:https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#styles https://docs.laravel-excel.com/3.1/exports/extending.html
解决方法
如果您查看 PhpSpreadsheet 的文档,我想您会发现无法从活动工作表访问 getDefaultStyle()
方法。
对于 Laravel Excel,$event->sheet
相当于 $spreadsheet->getActiveSheet()
。这就是您当前的配置不起作用的原因。
// this doesn't work
// $spreadsheet->getActiveSheet()->getDefaultStyle()->getFont()->setSize(5);
// this does
$spreadsheet->getDefaultStyle()->getFont()->setSize(5);
您应该通过 BeforeWriting
中的 writer 设置默认样式。
public function registerEvents():array
{
return [
BeforeWriting::class=>function(BeforeWriting $event){
$event->writer->getDefaultStyle()->getFont()->setSize(5);
},];
}
如果你想把它变成一个宏,你应该使用 Writer
宏而不是 Sheet
宏。
https://docs.laravel-excel.com/3.1/exports/extending.html#writer
public function registerEvents():array
{
Writer::macro('setDefaultStyle',function (Writer $writer) {
$writer->getDefaultStyle()->getFont()->setSize(5);
});
return [
BeforeWriting::class=>function(BeforeWriting $event){
$event->writer->setDefaultStyle();
},];
}