Laravel-admin自定义excel导出数据


model-grid内置的导出功能只是实现了简单的csv格式文件的导出,如果遇到文件编码问题或者满足不了自己需求的情况,可以按照下面的步骤来自定义导出功能

Laravel-admin1.5.*教程点击跳转:https://blog.csdn.net/qq175023117/article/details/80681533

Laravel-admin1.6.*教程点击跳转:https://blog.csdn.net/qq175023117/article/details/86133101

参考laravel-admin文档来进行扩展的方法:http://laravel-admin.org/docs/zh/model-grid-export

首先安装好它:

composer require maatwebsite/excel:~2.1.0

在config/app.php中的providers中添加: \Maatwebsite\Excel\ExcelServiceProvider::class,

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
{
    protected $file_name = 'file';
    protected $sheet_name = 'sheet';
    protected $head = [];
    protected $body = [];

    public function setAttr($file_name, $sheet_name, $head, $body)
    {
        $this->file_name = $file_name;
        $this->sheet_name = $sheet_name;
        $this->head = $head;
        $this->body = $body;
    }

    public function export()
    {
        Excel::create($this->file_name, function($excel) {
            $excel->sheet($this->sheet_name, function($sheet) {
                // 这段逻辑是从表格数据中取出需要导出的字段
                $body = $this->body;
                $bodyRows = collect($this->getData())->map(function ($item) use($body) {
                    $arr = [];

                    foreach($body as $value) {
                        $arr[] = array_get($item, $value);
                    }

                    return $arr;
                });
                $rows = collect([$this->head])->merge($bodyRows);
                $sheet->rows($rows);
            });
        })->export('xls');//.xls .csv ...
    }
}

操作实例

use App\Admin\Extensions\ExcelExpoter;

protected function grid()
{
   $grid = new Grid(new User);
   // 导出
   $excel = new ExcelExpoter();
   $date = date('Y-m-d H:i:s', time());
   $excel->setAttr('员工管理'.$date, '员工管理', ['id','姓名','性别'],['id','name','sex']);
   $grid->exporter($excel);

}

如案例不详细,可查看我开源项目源码:https://github.com/WXiangQian/stationery-cms

喜欢的可以给个star


文章作者: WXiangQian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WXiangQian !
 上一篇
Laravel5.5实现图片验证码的获取以及验证api接口 Laravel5.5实现图片验证码的获取以及验证api接口
本人感觉用的比较好的验证码包,拿出来分享一下,傻瓜式教程,大佬别喷。 原文链接:https://juejin.im/post/5d0c3ae9f265da1b6b1cdd2b用户登陆注册,不管前台后台,为了安全性还是需要加入手机短信或图形
2019-05-08
下一篇 
layui的二级联动 layui的二级联动
layui的二级联动 至少你要引入layui的公共资源$type1为后端传给前端的数据 下面分享layui二级联动HTML代码 题目分类: 选择题目分类
2019-04-02
  目录