📅  最后修改于: 2023-12-03 15:25:39.303000             🧑  作者: Mango
Excel 是一种广泛使用的电子表格应用程序,可以方便地处理数据。在 Laravel 开发中,我们有时需要把数据导出到 Excel 文件中,以方便对数据进行分析和处理。本篇文章将介绍如何在 Laravel 中快速导出 Excel 文件。
在 Laravel 开发中,我们通常使用 maatwebsite/excel 这个包来实现 Excel 导入导出功能。我们需要在 Laravel 项目中安装该包,具体步骤如下:
在 Laravel 项目中执行以下命令:
composer require maatwebsite/excel
安装完成后,在 config/app.php
文件中添加以下内容:
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
],
同时,在 config/app.php
文件的 aliases
数组中添加以下内容:
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'Date' => Illuminate\Support\Facades\Date::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Http' => Illuminate\Support\Facades\Http::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'Str' => Illuminate\Support\Str::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'Excel' => Maatwebsite\Excel\Facades\Excel::class, //添加该行
],
至此,我们已经通过 Composer 安装了 maatwebsite/excel 的依赖包,并在 Laravel 项目中注册了该包的服务提供者和别名。现在我们可以开始在 Laravel 项目中进行 Excel 导入导出功能的实现了。
在 Laravel 项目中实现 Excel 导出功能的步骤如下:
我们需要创建一个 Excel 导出类,用于导出指定的数据到 Excel 文件中。在 Laravel 项目中,我们可以使用以下 artisan 命令来创建该类:
php artisan make:export UsersExport --model=User
该命令会在 Laravel 项目的 app/Exports 目录中创建一个名为 UsersExport 的导出类,并让该类基于 User 模型。
接下来,我们需要对该类进行配置。打开 app/Exports/UsersExport.php 文件,可以看到该文件包含了一个名为 query()
的方法,该方法用于定义需要导出的数据,默认返回所有 User 模型实例。我们需要在该方法中指定需要导出的数据。例如,我们可以修改该方法如下:
public function query()
{
return User::query()->select('id', 'name', 'email');
}
该方法实现了一个简单的查询,返回了 User 的 id、name 和 email 字段的值。
接下来,我们需要通过实现 headings()
方法,指定表头。例如:
public function headings(): array
{
return ['ID', 'Name', 'Email'];
}
该方法返回一个数组,指定表头的字段名。
最后,我们需要指定导出的文件名和类型。在该类中,我们可以实现一个名为 fileName()
的方法,用于指定文件名。例如:
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
class UsersExport implements FromCollection, WithHeadings, ShouldAutoSize
{
use Exportable;
public function collection()
{
return User::query()->select('id', 'name', 'email')->get();
}
public function headings(): array
{
return ['ID', 'Name', 'Email'];
}
public function fileName(): string
{
return 'users.xlsx';
}
}
在该类中,我们使用了 Maatwebsite\Excel\Concerns\Exportable
trait,该 trait 提供了一个 download()
方法,可以实现自动下载导出的文件。
在 Laravel 项目中,我们需要先创建一个控制器类,用于调用导出类的方法。例如,我们可以实现以下控制器类:
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
class ExportController extends Controller
{
public function users()
{
return Excel::download(new UsersExport, 'users.xlsx');
}
}
在该控制器类中,我们使用了 $export
变量来实例化导出类 UsersExport
,并调用 download()
方法来自动下载导出的 Excel 文件。
在 Laravel 项目中,我们需要通过路由来定义 Excel 导出的接口。例如,我们可以实现以下路由:
Route::get('/export/users', 'ExportController@users')->name('export.users');
在该路由中,我们指定了一个 GET 请求,调用 ExportController
控制器的 users()
方法,并将其命名为 export.users
。
至此,我们已经通过创建导出类、在控制器中使用导出类、在路由中定义导出接口的步骤,实现了 Excel 导出功能。通过访问 /export/users 接口可以下载一个名为 users.xlsx 的 Excel 文件。
在本篇文章中,我们介绍了如何在 Laravel 中快速实现 Excel 导出功能。具体来说,我们通过安装 maatwebsite/excel
包、创建导出类、在控制器中使用导出类、在路由中定义导出接口的步骤,实现了一个简单的 Excel 导出功能。