代码之家  ›  专栏  ›  技术社区  ›  Success Man

我怎样才能改变颜色一个字符拉维尔excel马斯特威伯斯特?

  •  2
  • Success Man  · 技术社区  · 6 年前

    我从这里得到指导: https://laravel-excel.maatwebsite.nl/3.0/exports/extending.html

    所以我用版本3

    我的excel如下:

    enter image description here

    我想改成这样:

    enter image description here

    所以我想要这个角色 England 更改为红色和粗体

    我试着这样做:

    namespace App\Exports;
    ...
    use Maatwebsite\Excel\Concerns\WithEvents;
    use Maatwebsite\Excel\Events\BeforeExport;
    use Maatwebsite\Excel\Events\AfterSheet;
    
    class SummaryExport implements FromView, WithEvents
    {
        ...
        public function registerEvents(): array
        {
            return [
                AfterSheet::class    => function(AfterSheet $event) {
                    $event->sheet->styleCells(
                        'B1:D1',
                        [
                            'borders' => [
                                'outline' => [
                                    'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                                    'color' => ['argb' => 'EB2B02'],
                                ],
                            ]
                        ]
                    );
                },
            ];
        }
    }
    

    存在这样的错误:

    Method Maatwebsite\Excel\Sheet::styleCells does not exist.
    

    如何解决此错误?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mahbub    5 年前

    您可以在服务提供商的 boot 方法。例如 App\Providers\AppServiceProvider 提供商将如下所示:

    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use \Maatwebsite\Excel\Sheet;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot()
        {
            //
            Sheet::macro('styleCells', function (Sheet $sheet, string $cellRange, array $style) {
                $sheet->getDelegate()->getStyle($cellRange)->applyFromArray($style);
            });
        }
    
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    

    您应该创建不同的服务提供商来抵制这种用于隔离第三方关注点的宏。

    对于字体颜色集字体样式:

    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $event->sheet->styleCells(
                    'B1:D1',
                    [
                        //Set border Style
                        'borders' => [ 
                            'outline' => [
                                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                                'color' => ['argb' => 'EB2B02'],
                            ],
    
                        ],
    
                        //Set font style
                        'font' => [
                            'name'      =>  'Calibri',
                            'size'      =>  15,
                            'bold'      =>  true,
                            'color' => ['argb' => 'EB2B02'],
                        ],
    
                        //Set background style
                        'fill' => [
                            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
                            'startColor' => [
                                'rgb' => 'dff0d8',
                             ]           
                        ],
    
                    ]
                );
            },
        ];
    }