用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表单的主要内容,如果未能解决你的问题,请参考以下文章

laravel日志功能怎么用

Laravel:用两个表在 laravel 中显示数据

laravel 框架中试图中怎样用if标签

laravel框架用啥语言

laravel env怎么用

用laravel框架怎么实现删除