Laravel8 导出excel表

Laravel框架
651
0
0
2022-09-10

批量将房东信息数据导出成excel下载到本地,在laravel使用第3方插件库来完成此项工作

插件库:maatwebsite/excel - Packagist

官网:Introduction | Laravel Excel

Superchargeed Excel 在 Laravel |中导出和导入Laravel Excel (laravel-excel.com)

导出步骤:🚀 5 minute quick start | Laravel Excel

安装对应的phpexcel插件

composer require maatwebsite/excel

config/app.php中注册服务提供者到providers数组:

'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]

同样在config/app.php中注册门面到aliases数组:

'Excel' => Maatwebsite\Excel\Facades\Excel::class,

注:composer需要切源操作,否则下载将可能不会成功

安装成功后,就提供生成导出数据的命令,使用此命令生成导出数据文件

php artisan make:export FirmExport --model=Firm

生成对应的文件

Laravel8 导出excel表

添加表头:

<?php
namespace App\Exports;
use App\Models\Firm;
use Maatwebsite\Excel\Concerns\FromArray; // 指定使用数组结构
use Illuminate\Contracts\Support\Responsable;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings; // 设置excel的首行对应的表头信息
use Maatwebsite\Excel\Concerns\WithMapping; // 设置excel中每列要展示的数据
class FirmExport implements FromCollection, WithHeadings, WithMapping, Responsable
{
use Exportable;
protected $data;
private $fileName;
public function __construct(array $data)
{
//实例化该脚本的时候,需要传入要导出的数据
$this->data = $data;
}
/**
* 将数组转为集合
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return Firm::all();
}
/**
* // 返回的数据
* @return array
*/
public function array():array{
return $this->data;
}
/**
* 指定excel中每一列的数据字段
* @param mixed $row
* @return array
*/
public function map($row): array{
return [
$row['id'],
$row['q_name'],
];
}
/**
* 指定excel的表头
* @return array
*/
public
function headings(): array{
return [
'ID',
'企业名称',
];
}
}

定义导出的路由

//exports导出
Route::get('exports',[\App\Http\Controllers\UserController::class,'exports']);

在列表页中指定导出按钮地址

<a href="{{url('exports')}}" class="btn btn-primary radius">
<i class="Hui-iconfont">&#xe600;</i> 导出成excel</a>

在控制器中实现导出功能

use Maatwebsite\Excel\Facades\Excel;
use App\Exports\FirmExport;
/**
* 导出excel
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
*/
public function exports(){
$data=Firm::get()->toArray();
return Excel::download(new FirmExport($data),'firm.xlsx');
}