用laravel MaatwebsiteExcel 教你导出漂亮的Excel表单
Posted 寞小陌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用laravel MaatwebsiteExcel 教你导出漂亮的Excel表单相关的知识,希望对你有一定的参考价值。
先来看效果图
还算是漂亮吧 哈哈哈。
第一步当然是安装包咯
环境要求
php: ^7.0
Laravel: ^5.5
composer require maatwebsite/excel
目前3.1 只支持 Laravel 5.5 以上,所以会自动注册
发布配置文件:
php artisan vendor:publish
好了 就这么简单。
接下来就是使用啦。
excel 导出
代码尽量做到解耦,所以导入导出的代码不要和原来的业务耦合。我们新建一个UserExport
php artisan make:export UsersExport --model=User
. ├── app │ ├── Exports │ │ ├── UsersExport.php │ └── composer.json
UserExport的代码
<?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
以上是关于用laravel MaatwebsiteExcel 教你导出漂亮的Excel表单的主要内容,如果未能解决你的问题,请参考以下文章