安装
要求
安装前必须确认以下要求
- PHP: ^ 7.2|^8.0
- Composer: ^2.*
- Laravel: ^5.8
- PhpSpreadsheet: ^1.15
- php_zip启用PHP扩展
- php_xml启用PHP扩展
- php_gd2启用PHP扩展
- php_iconv启用PHP扩展
- php_simplexml启用PHP扩展
- php_xmlreader启用PHP扩展
- php_zlib启用PHP扩展
安装
进入项目根目录
cd {project_path}
# 默认安装最新版本
composer require maatwebsite/excel
Maatwebsite\Excel\ExcelServiceProvider
是自动发现并默认注册。
如果要自己注册,请在config/app.php
以下位置添加ServiceProvider
:
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
Excel facade 也是自动发现。
如果要手动添加,请在中添加外观config/app.php
:
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
要发布配置,请运行provider的发布命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
这将创建一个名为的新配置文件config/excel.php
。
快速导出
创建一个Excel类
可以通过make:export
创建Excel命名空间及对应的Excel处理类.
php artisan make:export EnrollExport--model=Volunteer
执行命令后会创建以下文件
├── app
│ ├── Exports
│ │ ├── EnrollExport.php
│
└── composer.json
生成导出内容
在EnrollExport.php
是所有导出文件的处理,数据处理、单元格样式等等
根据下列的情况EnrollExport
需要继承不同的接口,如果不继承则对应的设置不会生效
- 从
Eloquent ORM
中导入数据,继承FromCollection
- 调整列宽,继承
WithColumnWidths
- 调整样式,继承
WithStyles
<?php
namespace App\Exports;
use App\Models\ActivityEnrollLog;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class EnrollExport implements FromCollection, WithColumnWidths, WithStyles
{
public $data;//需要导出的数据
public function __construct($data) {
$this->data = $data;
}
/**
* 组合表头和数据
* @return \Illuminate\Support\Collection
* @author wanghongrui 20210330
*/
public function collection()
{
$collect = collect([]);
$thead = collect([
'志愿者编号',
'姓名',
'电话',
'活动名称',
'报名时间',
'取消时间',
'报名状态'
]);
$collect->push($thead);
foreach ($this->data as $d) {
$rowData = collect([
$d->volunteer->v_number,
$d->volunteer->name,
$d->volunteer->phone,
$d->activity->active_name,
$d->enroll_time,
$d->cancel_time,
$d->status_str,
]);
$collect->push($rowData);
}
return $collect;
}
/**
* 设置列宽
*
* @return array
* @author wanghongrui 20210330
*/
public function columnWidths(): array
{
return [
'A' => 15, 'B' => 20, 'C' => 30, 'D' => 50, 'E' => 20, 'F' => 20, 'G' => 10,
];
}
/**
* 格式化列
* @return array
*/
// public function columnFormats(): array
// {
// $format = NumberFormat::FORMAT_NUMBER_00;//金额保留两位小数
// return ['G' => $format, 'H' => $format, 'I' => $format, 'J' => $format, 'K' => $format];
// }
/**
* 单元格样式设置
*
* @param Worksheet $sheet
* @author wanghongrui 20210330
*/
public function styles(Worksheet $sheet)
{
$sheet->getDefaultRowDimension()->setRowHeight(22);//设置行高
$sheet->getStyle('A1:G'.($this->data->count()+1))->getAlignment()->setVertical('center');//垂直居中
$sheet->getStyle('A1:G'.($this->data->count()+1))->applyFromArray(['alignment' => ['horizontal' => 'center']]);//设置水平居中
}
}
下载导出文件
生成的导出文件直接通过Excel::download()
进行下载
return Excel::download(new EnrollExport($data), '志愿者报名信息表.xlsx');
.