laravel admin-02-数据导出
程序员文章站
2022-06-11 17:13:04
...
默认的csv导出有中文乱码的问题,需修改一下CsvExporter.php文件
打开 vendor/encore/laravel-admin/src/Grid/Exporters/CsvExporter.php
在public function export() 的$headers后面添加
print(chr(0xEF).chr(0xBB).chr(0xBF));
但还是不太方便,改为用laravel-excel吧
一.安装
对于laravel5.6及以上的,直接composer安装即可
composer install maatwebsite/excel
php artisan vendor:publish
二.使用
在app目录下建一个Exports目录,添加一个excel的导出类。
比如建一个导出用户信息的AdminUserExport.php,内容如下
<?php
namespace App\Exports;
use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Concerns\WithMapping;
class AdminUserExport extends ExcelExporter implements WithMapping
{
protected $fileName = '用户信息表.xlsx';
protected $columns = [
'nickName' => '昵称',
'openid' => 'openid',
'id_card' => '身份证',
];
public function map($user) : array
{
return [
$user->nickName,
$user->openid,
$user->id_card,
];
}
}
在admin对应的controller中直接使用
use App\Exports\AdminUserExport;
// excel导出
$grid->exporter(new AdminUserExport());
这样就能导出自定义的excel了
三.科学计数法的问题
导出excel时,如果字段的内容是数字(比如身份证),默认则会变成科学计数,导致数字不完整。
方案一:
在export对应字段中加入空格,比如AdminUserExport.php对应的内容可改为如下:
public function map($user) : array
{
return [
$user->nickName,
$user->openid,
$user->id_card = ' '.$user->id_card,
];
}
方案二:
将config/excel.php中value_binder改为如下配置
'default' => PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class,