微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设置 Laravel-excel 和 PhpSpreadsheet 宏

如何解决设置 Laravel-excel 和 PhpSpreadsheet 宏

我使用的是 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();
        },];
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。