推荐一个基于xlswriter的laravel-excel扩展包

简介#

如果您的项目在使用 SpartnerNL/Laravel-Excel 时遇到大数据导出性能问题,并且不希望进行大规模代码修改,那么这个扩展可能非常适合您。需要注意的是,目前这个扩展尚未完全兼容所有功能,仅实现了部分基础功能。

仓库地址#

github.com/carlin-rj/laravel-excel

Laravel-excel 使用教程#

环境要求#

  • xlswriter>= 1.3.7
  • PHP >= 8.0 安装请按照 XlsWriter 的官方文档: 安装教程

安装#

composer require mckue/laravel-excel

发布配置文件 mckue-excel.php:#

php artisan vendor:publish --provider="Mckue\Excel\ExcelServiceProvider" --tag=config

1. 命令#

1.1 查看 xlswriter 扩展是否正常安装#
 php artisan php-ext-xlswriter:status

展示信息如下:

info:
+---------+---------------------------------------------+
| version | 1.0                                         |
| author  | mckue<https://github.com/carlin-rj>             |
| docs    | https://github.com/carlin-rj/laravel-excel      |
+---------+---------------------------------------------+
XlsWriter extension status:
+-------------------------------+----------------------------+
| loaded                        | yes                        |
| xlsWriter author              | Jiexing.Wang (wjx@php.net) |
| xlswriter support             | enabled                    |
| Version                       | 1.3.7                      |
| bundled libxlsxwriter version | 1.0.0                      |
| bundled libxlsxio version     | 0.2.27                     |
+-------------------------------+----------------------------+

如您的信息展示如上所示,证明您的 cli 环境下本扩展可用。

1. 快速开始#

<?php

namespace App\Exports;

use Mckue\Excel\Concerns\FromArray;

class UserExport implements FromArray
{
 /** 
  * @return array */ 
  public function array() : array 
  { 
    return [ ['哈哈', 'aaa'],
         ['哈哈', 'aaa'],
         ['哈哈', 'aaa'],
         ['哈哈', 'aaa']
         ]; 
  }
 /** 
   * @return array 
   */ 
 public function headers() : array {
     return []; 
 }
}

🔥 在您的控制器中,您现在可以调用此导出:

<?php

namespace App\Http\Controllers;

use App\Exports\UsersExport;
use Mckue\Excel\Facades\Excel;

class UsersController extends Controller 
{
    public function export() 
    {
        return Excel::download(new UserExport, 'users.xlsx');
    }
}

最后添加一条能够访问导出的路由:

Route::get('users/export/', [UsersController::class, 'export']);

2. 导出集合#

InvoicesExport 创建一个名为的新类 app/Exports:

namespace App\Exports;

use App\Invoice;
use Mckue\Excel\Concerns\FromCollection;

class InvoicesExport implements FromCollection
{
    public function collection()
    {
        return Invoice::all();
    }
}

在您的控制器中,我们现在可以下载此导出:

public function export() 
{
    return Excel::download(new InvoicesExport, 'invoices.xlsx');
}

您可以选择传入是否输出标头和自定义响应标头:

public function export() 
{
    return Excel::download(new InvoicesExport, 'invoices.xlsx', true, ['X-Vapor-Base64-Encode' => 'True']);
}

或者将其存储在磁盘上(例如 s3):

public function storeExcel() 
{
    return Excel::store(new InvoicesExport, 'invoices.xlsx', 's3');
}

3. 使用自定义结构#

namespace App\Exports;

use App\Invoice;
use Mckue\Excel\Concerns\FromCollection;

class InvoicesExport implements FromCollection
{
    public function collection()
    {
        return new Collection([
            [1, 2, 3],
            [4, 5, 6]
        ]);
    }
}

4. 使用查询#

namespace App\Exports;

use App\Invoice;
use Mckue\Excel\Concerns\FromQuery;
use Mckue\Excel\Concerns\Exportable;

class InvoicesExport implements FromQuery
{
    use Exportable;

    public function query()
    {
        return Invoice::query();
    }
}

5. 使用迭代器#

namespace App\Exports;

use App\Invoice;
use Mckue\Excel\Concerns\FromIterator;
use Mckue\Excel\Concerns\Exportable;

class InvoicesExport implements FromIterator
{
    use Exportable;

    public function iterator(): Iterator
    {
        ...
    }
}

在前面的示例中,我们使用 Excel::download Facades 来启动导出。

namespace App\Exports;

use App\Invoice;
use Mckue\Excel\Concerns\FromCollection;
use Mckue\Excel\Concerns\Exportable;

class InvoicesExport implements FromCollection
{
    use Exportable;

    public function collection()
    {
        return Invoice::all();
    }
}

我们现在可以下载导出而无需 Facades:

return (new InvoicesExport)->download('invoices.xlsx');

或者将其存储在磁盘上:

return (new InvoicesExport)->store('invoices.xlsx', 's3');

更多文档可参考 WIKI

在此感谢 xlswriter 的开发者 viest 以及 SpartnerNL/Laravel-Excel 的开发者。
如有什么问题可以及时反馈到 github 哦。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
kinyou

感谢楼主造轮子方便大家

9个月前 评论
91it (楼主) 9个月前