laravel中 使用 maatwebsite/excel 导出数据 自定义头部 输出内容 与单元格文本字段格式

315 阅读1分钟

composer require maatwebsite/excel

Create an export class in app/Exports

php artisan make:export UsersExport --model=User

<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;

class UsersExport implements FromCollection,WithMapping, WithHeadings, ShouldAutoSize,WithColumnFormatting
{
    protected array $data;

    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function collection()
    {
        return collect($this->data);
    }
    
    /**
     * 设置头部
     * @return array
     */
    public function headings(): array
    {
        return [
            '编号',
            '账号',
            '手机号',
            // ....
        ];
    }

    /**
     * 设置显示字段 与 头部对应
     * @return array
     */
    public function map($row): array
    {
        return [
           'id' => $row->id,
            // .....
        ];
    }
    
    /**
     * 设置对应列的输出单元格的字符类型
     * @return array
     */
    public function columnFormats(): array
    {
        return [
            'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
            'C' => NumberFormat::FORMAT_NUMBER_00,
        ];
    }

    
}
<?php
namespace App\Http\Controllers;

use Maatwebsite\Excel\Facades\Excel;
use App\Exports\UsersExport;

class UserController
{
    public function export()
    {
        $excel = [
            ['id'=>1],
            // ....
        ];
        return Excel::download(new UsersExport($excel), 'filename.xlsx');
    }
}