用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

相關文章
相關標籤/搜索