数据导出
model-grid
内置的导出功能只是实现了简单的csv格式文件的导出,如果遇到文件编码问题或者满足不了自己需求的情况,可以按照下面的步骤来自定义导出功能
Laravel-Excel v3.*
在v1.6.12
版本之后增加了对Laravel-Excel 3.*
版本的导出支持。
首先按照文档安装好Laravel-Excel。
然后创建导出类:
<?php
namespace App\Admin\Extensions;
use Encore\Admin\Grid\Exporters\ExcelExporter;
class PostsExporter extends ExcelExporter
{
protected $fileName = '文章列表.xlsx';
protected $columns = [
'id' => 'ID',
'title' => '标题',
'content' => '内容',
];
}
然后在Grid中使用这个导出类:
use App\Admin\Extensions\PostsExporter;
$grid->exporter(new PostsExporter());
通过上面的$columns
设置,导出时只会导出三个指定的三个字段,如果你要导出所有的字段,指定按照顺序指定每一个字段的名称即可
class PostsExporter extends ExcelExporter
{
protected $fileName = '文章列表.xlsx';
protected $headings = ['ID', '标题', '内容' ... ];
}
数据修改
按照上面的方法,会将数据库中存储的原始数据导出,如果你希望对数据进行预处理,参考下面的方式:
<?php
namespace App\Admin\Extensions\Export;
use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Concerns\WithMapping;
class UsersExporter extends ExcelExporter implements WithMapping
{
protected $fileName = '用户列表.xlsx';
protected $columns = [
'id' => 'ID',
'name' => '姓名',
'status' => '状态',
'profile.homepage' => '主页',
];
public function map($user) : array
{
return [
$user->id,
$user->name,
$user->status ? 'yes' : 'no'; // 字段数据替换
data_get($user, 'profile.homepage'), // 读取关联关系数据
];
}
}
Laravel-Excel v2.*
本示例用Laravel-Excel作为excel操作库,当然也可以使用任何其他excel库
首先安装好它:
composer require maatwebsite/excel:~2.1.0
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
然后新建自定义导出类,比如app/Admin/Extensions/ExcelExpoter.php
:
<?php
namespace App\Admin\Extensions;
use Encore\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Facades\Excel;
class ExcelExpoter extends AbstractExporter
{
public function export()
{
Excel::create('Filename', function($excel) {
$excel->sheet('Sheetname', function($sheet) {
// 这段逻辑是从表格数据中取出需要导出的字段
$rows = collect($this->getData())->map(function ($item) {
return array_only($item, ['id', 'title', 'content', 'rate', 'keywords']);
});
$sheet->rows($rows);
});
})->export('xls');
}
}
然后在model-grid
中使用这个导出类:
use App\Admin\Extensions\ExcelExpoter;
$grid->exporter(new ExcelExpoter());
有关更多Laravel-Excel
的使用方法,参考laravel-excel/docs
当前内容版权归 laravel-admin.org 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 laravel-admin.org .