用laravel Maatwebsite\Excel 教你导出漂亮的Excel表单

先来看效果图php

 

 

还算是漂亮吧 哈哈哈。html

第一步固然是安装包咯web

环境要求

PHP: ^7.0
Laravel: ^5.5json

composer require maatwebsite/excel

目前3.1 只支持 Laravel 5.5 以上,因此会自动注册数组

发布配置文件:app

php artisan vendor:publish

好了 就这么简单。composer

接下来就是使用啦。字体

excel 导出

代码尽可能作到解耦,因此导入导出的代码不要和原来的业务耦合。咱们新建一个UserExportui

php artisan make:export UsersExport --model=User
. ├── app │ ├── Exports │ │ ├── UsersExport.php │ └── composer.json

UserExport的代码this

<?php namespace App\Exports; use App\User; use Maatwebsite\Excel\Concerns\FromCollection; class UsersExport implements FromCollection { public function collection() { return User::all(); } }

业务控制器中的调用

public function export() { return Excel::download(new UsersExport, 'users.xlsx'); }

这样最简单的导出就行了。

接下来咱们聊一聊美化的东西。

首先咱们建立一个基类BaseExport,子类直接继承就能够了,从而不用重复写。

这是个人BaseExport代码

<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Concerns\WithStrictNullComparison; use Maatwebsite\Excel\Events\AfterSheet; class BaseExport implements WithEvents, WithStrictNullComparison, ShouldAutoSize { /** * 注册事件 * @return array */
    public function registerEvents(): array { return [ AfterSheet::class => function (AfterSheet $event) { //设置做者
                $event->writer->setCreator('寞小陌');//writer属性如今好像有点问题。。。 //设置列宽
                $event->sheet->getDelegate()->getColumnDimension('A')->setWidth(50); //设置区域单元格垂直居中
                $event->sheet->getDelegate()->getStyle('A1:Z1265')->getAlignment()->setVertical('center'); //设置区域单元格水平居中
                $event->sheet->getDelegate()->getStyle('A1:Z1265')->getAlignment()->setHorizontal('center'); //设置区域单元格字体、颜色、背景等,其余设置请查看 applyFromArray 方法,提供了注释
                $event->sheet->getDelegate()->getStyle('A1:Z1')->applyFromArray([ 'font' => [ 'name' => 'Arial',
                        'bold' => true,
                        'italic' => false,
                        'strikethrough' => false,
                        'color' => [ 'rgb' => 'FFFFFF' ] ],
                    'fill' => [ 'fillType' => 'linear', //线性填充,相似渐变
                        'rotation' => 45, //渐变角度
                        'startColor' => [ 'rgb' => '54AE54' //初始颜色
                        ],
                        //结束颜色,若是须要单一背景色,请和初始颜色保持一致
                        'endColor' => [ 'argb' => '54AE54' ] ] ]);
          //合并单元格
          $event->sheet->getDelegate()->mergeCells('A1:B1');
} ]; } }

最重要的就是WithEvents接口了,可是咱们先说说WithStrictNullComparison这个接口,继承了这个接口能让你丢失的0所有给你补回来哈哈哈。

ShouldAutoSize接口让你的表格大小自适应,不是特别重要,可是用了会好点。

接下来再来讲说第一个接口。

里面我找到最好用的仍是垂直居中和水平居中的方法了。让表单瞬间好看不少,犹豫咱们继承了自适应,因此通常也用不到设置列宽啊行高这类的。

而后设置区域内单元格的字体、颜色、背景等。我喜欢把标题加个背景色,这样能让数据和标题有个明显的区分。看起来也比较舒服。

具体看代码里的备注吧,仍是比较清楚的。

接下来讲一声多表单导出的问题。

直接上代码

<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\WithMultipleSheets; class FlatAccountMultipleExport implements WithMultipleSheets { private $user; private $lang; private $request; public function __construct($user, $lang, $request) { $this->user = $user; $this->lang = $lang; $this->request = $request; } public function sheets(): array { $sheets = [ new FlatAccountExport($this->user, $this->lang, $this->request),
            new LendingSubsidiaryExport($this->user, $this->lang, $this->request) ]; return  $sheets; } }

sheets方法里面返回的数组就是个多表单。

接下来就是单个表单的事,都和上面的同样。

本文属于我的原创,欢迎转载,转载请附连接:https://www.cnblogs.com/x-x-j/p/12118608.html