您的位置:

使用Laravel Excel快速导出数据到Excel表格

一、项目背景

Laravel是一个流行的PHP框架,它提供了轻松构建Web应用程序所需的工具和功能。然而,在某些情况下,我们需要从Web应用程序中导出数据并生成Excel表格,而Laravel框架并没有这个功能。因此,我们需要使用第三方扩展库Laravel Excel来快速导出数据到Excel表格。

二、安装Laravel Excel扩展库

安装Laravel Excel非常简单,只需在终端中执行以下命令:

composer require maatwebsite/excel

当安装完成后,我们需要向Laravel注册扩展库。打开config/app.php文件,在providers数组中添加以下代码:

'providers' => [
    // ...
    Maatwebsite\Excel\ExcelServiceProvider::class,
]

在aliases数组中也需要添加以下配置代码:

'aliases' => [
    // ...
    'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

三、导出Excel表格

1.简单例子

为了说明如何使用Laravel Excel库快速导出数据到Excel表格,我们来看一个简单的例子。首先,我们需要创建一个控制器:

php artisan make:controller ExportController

然后打开ExportController.php文件,添加以下代码:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class ExportController extends Controller
{
    public function export()
    {
        $data = [
            ['id' => 1, 'name' => 'John'],
            ['id' => 2, 'name' => 'Jane'],
            ['id' => 3, 'name' => 'Steve'],
            ['id' => 4, 'name' => 'Marius'],
        ];

        return Excel::download(new UsersExport($data), 'users.xlsx');
    }
}

导出的数据保存在$data数组变量中,并且我们将使用Export类将数据导出到Excel文件。最后,我们将文件保存为users.xlsx。我们只需要添加一个按钮到我们的视图中,调用export()函数即可实现文件导出:

<a href="{{ route('export') }}">Export</a>

我们需要创建一个Export类,打开终端,执行以下命令:

php artisan make:export UsersExport --model=User

这将创建一个名为UsersExport的类,并在其中添加导出Excel文件所需的函数:

namespace App\Exports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function collection()
    {
        return collect($this->data);
    }
}

现在我们就可以使用以下命令在浏览器中运行export()函数,该函数将导出数据并保存到users.xlsx文件中:

php artisan serve

2.增加样式

我们可以很容易地向导出的Excel文件中添加样式,只需在Export类中添加一个函数即可:

public function headings(): array
{
    return [
        'ID', 'Name'
    ];
}

public function styles(Worksheet $sheet)
{
    $cellRange = 'A1:B1';  // 选择要设置样式的范围
    $sheet->getStyle($cellRange)->applyFromArray([
        'font' => [
            'bold' => true
        ]
    ]);
}

3.使用多个表格

有时,我们需要将多个表格导出到单个Excel文件中。这也很容易实现,只需在Export类中添加另一个函数即可:

namespace App\Exports;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;

class UsersExport implements FromCollection, WithMultipleSheets
{
    use Exportable;

    protected $data;

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

    public function collection()
    {
        return collect($this->data);
    }

    public function sheets(): array
    {
        $sheets = [];

        $sheets[] = new UsersSheet($this->data);
        $sheets[] = new OrdersSheet($this->data);

        return $sheets;
    }
}

class UsersSheet implements FromCollection
{
    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function collection()
    {
        return collect($this->data);
    }

    public function headings(): array
    {
        return ['ID', 'Name'];
    }
}

class OrdersSheet implements FromCollection
{
    public function __construct(array $data)
    {
        $this->data = $data;
    }

    public function collection()
    {
        return collect($this->data);
    }

    public function headings(): array
    {
        return ['Order ID', 'Amount'];
    }
}

在以上例子中,我们创建了一个名为UsersSheet的类和一个名为OrdersSheet的类,每个类都创建了自己的表格。然后,我们可以使用sheets()函数将它们组合在一起并导出到单个Excel文件中。

四、总结

使用Laravel Excel扩展库可以轻松地将数据导出到Excel表格中,而且也非常容易添加样式和多个表,非常方便。希望大家可以根据本文提供的方法实践开发,以便更好的了解和掌握Laravel Excel的应用。