首頁  >  文章  >  php框架  >  聊聊Laravel Excel 的五個鮮為人知的功能

聊聊Laravel Excel 的五個鮮為人知的功能

青灯夜游
青灯夜游轉載
2023-01-11 20:43:181776瀏覽

聊聊Laravel Excel 的五個鮮為人知的功能

Laravel Excel package 最近發布了 3.0 版本,它所具有的新功能,可以幫助簡化進階需求,可用性極高。大家一起來探討一些可能不知道的隱藏功能,這些功能使 Laravel Excel 成為 Excel 拓展的最佳首選。

1. 從HTML 或是Blade 匯入資料

##假設已經有一個HTML 表格

聊聊Laravel Excel 的五個鮮為人知的功能

模版程式碼-- resources/views/customers/table.blade.php:

<table class="table">
    <thead>
    <tr>
        <th></th>
        <th>First name</th>
        <th>Last name</th>
        <th>Email</th>
        <th>Created at</th>
        <th>Updated at</th>
    </tr>
    </thead>
    <tbody>
    @foreach ($customers as $customer)
    <tr>
        <td>{{ $customer->id }}</td>
        <td>{{ $customer->first_name }}</td>
        <td>{{ $customer->last_name }}</td>
        <td>{{ $customer->email }}</td>
        <td>{{ $customer->created_at }}</td>
        <td>{{ $customer->updated_at }}</td>
    </tr>
    @endforeach
    </tbody>
</table>

你可以使用它去重複導入這個表格到Excel

步驟1. 產生一個Export 類別

php artisan make:export CustomersFromView --model=Customer

步驟2. 使用FromView 進行操作

namespace App\Exports;

use App\Customer;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;

class CustomersExportView implements FromView
{
    public function view(): View
    {
        return view(&#39;customers.table&#39;, [
            &#39;customers&#39; => Customer::orderBy(&#39;id&#39;, &#39;desc&#39;)->take(100)->get()
        ]);
    }
}

這裡是導入的Excel 檔案:

聊聊Laravel Excel 的五個鮮為人知的功能

注意:這裡只能匯出HTML 表格,不能有任何標籤,例如html,body,div 等。


2. 匯出到PDF,HTML,或是其他格式的檔案

#雖然套件的名稱是Laravel Excel,但是提供了多種匯出格式,並且使用起來十分簡單,只要在類別裡再加入一個參數即可:

return Excel::download(new CustomersExport(), &#39;customers.xlsx&#39;, &#39;Html&#39;);

例如這麼做,就導出到了HTML,如下圖所示:

聊聊Laravel Excel 的五個鮮為人知的功能

沒有太多的樣式,以下是原始碼:

聊聊Laravel Excel 的五個鮮為人知的功能

#不僅如此,它還可以匯出到PDF,甚至你可以從中選擇三種函式庫,使用方法是一樣的,你只要在最後一個參數指定格式就好了,以下是一些例子。

文件範例:

聊聊Laravel Excel 的五個鮮為人知的功能

注意:你必須透過composer 安裝指定的PDF 包,例如:

composer require dompdf/dompdf

匯出的PDF 如下所示:

聊聊Laravel Excel 的五個鮮為人知的功能


3. 按需格式化儲存格

Laravel Excel 有一個強而有力的「爸爸」 -- 

PhpSpreadsheet 。因此它就擁有其各種底層功能,包括各種方式的單元格格式化。

這裡有一個如何在 Laravel Export 類別中使用它的例子,例如 app/Exports/CustomersExportStyling.php:

步驟 1. 在頭部引入適當的類別。

use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;

步驟 2. 在 implements 部分使用 WithEvents 介面。

class CustomersExportStyling implements FromCollection, WithEvents
{
    // ...

步驟 3. 用 AfterSheet 事件來建立 registerEvents() 方法。

/**
 * @return array
 */
public function registerEvents(): array
{
    return [
        AfterSheet::class    => function(AfterSheet $event) {
            // ... 此处你可以任意格式化
        },
    ];
}

這裡有個例子:

/**
 * @return array
 */
public function registerEvents(): array
{
    return [
        AfterSheet::class    => function(AfterSheet $event) {
            // 所有表头-设置字体为14
            $cellRange = &#39;A1:W1&#39;;
            $event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);

            // 将样式数组应用于B2:G8范围单元格
            $styleArray = [
                &#39;borders&#39; => [
                    &#39;outline&#39; => [
                        &#39;borderStyle&#39; => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK,
                        &#39;color&#39; => [&#39;argb&#39; => &#39;FFFF0000&#39;],
                    ]
                ]
            ];
            $event->sheet->getDelegate()->getStyle(&#39;B2:G8&#39;)->applyFromArray($styleArray);

            // 将第一行行高设置为20
            $event->sheet->getDelegate()->getRowDimension(1)->setRowHeight(20);

            // 设置 A1:D4 范围内文本自动换行
            $event->sheet->getDelegate()->getStyle(&#39;A1:D4&#39;)
                ->getAlignment()->setWrapText(true);
        },
    ];
}

這些「隨機」範例展示的結果如下所示:

聊聊Laravel Excel 的五個鮮為人知的功能

你可以在

Recipes page of PhpSpreadsheet docs中找到所有的以上以及更多範例。


4. 隱藏模型屬性

假設我們已經建立了

Laravel 5.7預設的users表:

聊聊Laravel Excel 的五個鮮為人知的功能

#現在我們嘗試用簡單的

FromCollection來導出用戶表資料:

class UsersExport implements FromCollection
{
    public function collection()
    {
        return User::all();
    }
}

在導出的Excel 裡,你只能看到如下字段,但是沒有

passwordremember_token

聊聊Laravel Excel 的五個鮮為人知的功能

#這是因為在

User模型裡定義了隱藏欄位的屬性:

class User extends Authenticatable
{
    // ...

    /**
     * 这个数组用来定义需要隐藏的字段。
     *
     * @var array
     */
    protected $hidden = [
        &#39;password&#39;, &#39;remember_token&#39;,
    ];
}

所以,預設情況下這些欄位是隱藏的,如果你想在匯出資料的時候某些欄位不被匯出的話,可以直接在模型中定義隱藏屬性

$hidden


5. 公式

出於某種原因,Laravel Excel 套件的官方文件中並沒有提及公式,但這是Excel 重要的功能!

幸運的是,我們可以直接將公式寫在導出資料的類別中,我們需要設定

cell 的值,就像這樣:=A2 1 or SUM(A1 :A10)

其中一個方法就是實作

WithMapping 介面:

use App\Customer;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithMapping;

class CustomersExportFormulas implements FromCollection, WithMapping
{
    public function collection()
    {
        return Customer::all();
    }

    /**
     * @var Customer $customer
     * @return array
     */
    public function map($customer): array
    {
        return [
            $customer->id,
            &#39;=A2+1&#39;,
            $customer->first_name,
            $customer->last_name,
            $customer->email,
        ];
    }
}

以上就是Laravel Excel的五個鮮為人知的功能。

原文網址:https://laravel-news.com/five-hidden-features-of-the-laravel-excel-package

翻譯網址:https:// learnku.com/laravel/t/24161

【相關推薦:laravel影片教學

以上是聊聊Laravel Excel 的五個鮮為人知的功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除