设置 Laravel-excel 和 PhpSpreadsheet 宏
Setting up Laravel-excel and PhpSpreadsheet macro
我正在使用 Maatwebsite Laravel-excel 3.1 版。我想设置 sheet 的默认样式。我已经阅读了有关通过在我的 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()
方法无法从活动 sheet.
访问
到LaravelExcel,$event->sheet
相当于$spreadsheet->getActiveSheet()
。这就是为什么您当前的配置不起作用的原因。
// this doesn't work
// $spreadsheet->getActiveSheet()->getDefaultStyle()->getFont()->setSize(5);
// this does
$spreadsheet->getDefaultStyle()->getFont()->setSize(5);
你应该在 BeforeWriting
.
中通过编写器设置默认样式
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();
},
];
}
我正在使用 Maatwebsite Laravel-excel 3.1 版。我想设置 sheet 的默认样式。我已经阅读了有关通过在我的 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()
方法无法从活动 sheet.
到LaravelExcel,$event->sheet
相当于$spreadsheet->getActiveSheet()
。这就是为什么您当前的配置不起作用的原因。
// this doesn't work
// $spreadsheet->getActiveSheet()->getDefaultStyle()->getFont()->setSize(5);
// this does
$spreadsheet->getDefaultStyle()->getFont()->setSize(5);
你应该在 BeforeWriting
.
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();
},
];
}