1. 程式人生 > 實用技巧 >用laravel Maatwebsite\Excel 設定格式和匯出

用laravel Maatwebsite\Excel 設定格式和匯出

用laravel Maatwebsite\Excel 教你匯出漂亮的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