github:https://github.com/Maatwebsite/Laravel-Excel
参考文档:https://docs.laravel-excel.com/3.1/getting-started/installation.html

  1. 安装
    1). 使用 composer 安装:
composer require maatwebsite/excel

此处下载的是最新版,目前是 v3.1.18,PHP版本要求大于 7.2 ,而v3和v2是不兼容的,方法还不一样,完全是重写了,网上看到的教程基本都是v2的,我
觉得作者舍弃老版本肯定是有原因的,还是不要固执的使用v2啦。

Version      Laravel Version     Php Version     Support
2.1         <=5.6               <=7.0           Unsupported since 15-5-2018
3.0         ^5.5                ^7.0            Unsupported since 31-12-2018
3.1         ^5.5|^6.0           ^7.1            New features

2). 安装完成后,修改 config/app.php 在 providers 数组内

'providers' => [...Maatwebsite\Excel\ExcelServiceProvider::class,
]注册Facade'aliases' => [...'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

3). 发布配置

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

在 config 目录下多出了 excel.php

  1. 使用

全部方法:

/*** @method static BinaryFileResponse download(object $export, string $fileName, string $writerType = null, array $headers = [])* @method static bool store(object $export, string $filePath, string $disk = null, string $writerType = null, $diskOptions = [])* @method static PendingDispatch queue(object $export, string $filePath, string $disk = null, string $writerType = null, $diskOptions = [])* @method static BaseExcel import(object $import, string $filePath, string $disk = null, string $readerType = null)* @method static array toArray(object $import, string $filePath, string $disk = null, string $readerType = null)* @method static Collection toCollection(object $import, string $filePath, string $disk = null, string $readerType = null)* @method static PendingDispatch queueImport(object $import, string $filePath, string $disk = null, string $readerType = null)* @method static void matchByRegex()* @method static void doNotMatchByRegex()* @method static void assertDownloaded(string $fileName, callable $callback = null)* @method static void assertStored(string $filePath, string $disk = null, callable $callback = null)* @method static void assertQueued(string $filePath, string $disk = null, callable $callback = null)* @method static void assertImported(string $filePath, string $disk = null, callable $callback = null)*/

创建一个导出数据模型类,来作为数据源。

php artisan make:export UsersExport

示例:数组模型导出

<?phpnamespace App\Exports;use Maatwebsite\Excel\Concerns\FromArray;class UsersExport implements FromArray
{protected $invoices;public function __construct(array $invoices){$this->invoices = $invoices;}public function array(): array{return $this->invoices;}
}

我们可以通过http请求来下载download,也可以直接生成并保存到本地store

我是喜欢用命令行来测试,于是我在 DemoCommand 中:

use Maatwebsite\Excel\Facades\Excel;
public function handle()
{$this->test6();
}function test6()
{$cellData = [['学号', '姓名', '成绩'],['10001', 'AAAAA', '99'],['10002', 'BBBBB', '92'],['10003', 'CCCCC', '95'],['10004', 'DDDDD', '89'],['10005', 'EEEEE', '96'],];$export = new UsersExport($cellData);Excel::store($export, 'invoices.xlsx');
}

执行 php artisan DemoCommand

于是,在 storage/app 下生成了文件 invoices.xlsx

1、diskName参数是需要指定Laravel文件系统Filesystem的磁盘位置,并不是我们的物理磁盘。2、filePath参数是相对于storage/app下的路径。3、目前来看,值为0的导出后是空的,如果需要显示0的话,那么你的模型要实现接口WithStrictNullComparison。4、默认起始单元格式A1,如果想修改,需要模型实现接口WithCustomStartCell。需要实现方法public function startCell(): string{return 'B2';}目前WithCustomStartCell只支持collection模型。5、设置sheet的名称,需要你的导出模型实现接口WithTitle的方法:public function title(): string{return '导出数据';}6、多sheet表需要实现接口WithMultipleSheets,具体看文档。

示例:collection模型导出

php artisan make:export CollectionExport
<?phpnamespace App\Exports;use Maatwebsite\Excel\Concerns\FromCollection;class CollectionExport implements FromCollection, WithStrictNullComparison
{private $collections;public function __construct($collections){$this->collections = $collections;}/*** @return \Illuminate\Support\Collection*/public function collection(){return $this->collections;}
}

当然,你还可以在CollectionExport中对集合做一些处理。

在 DemoCommand 中:

public function handle()
{$this->test7();
}function test7(){$coll = MapCity::take(10)->get();Excel::store(new CollectionExport($coll), 'map/collection.xlsx');
}

数组转集合:

new Collection(array)
collect(array)

示例:返回原始的二进制数据

function test7(){$cellData = [['学号', '姓名', '成绩'],['10001', 'AAAAA', '99'],['10002', 'BBBBB', '92'],['10003', 'CCCCC', '95'],['10004', 'DDDDD', '89'],['10005', 'EEEEE', '96'],];$export = new UsersExport($cellData);$contents = Excel::raw($export, \Maatwebsite\Excel\Excel::XLSX);// Excel::XLSX 会提示未定义file_put_contents('aa.xlsx', $contents);
}

3、macro支持

如果你以为必须要先建立导出数据模型那你就太低估这个插件了,其实它还提供了macro支持,为collection对象赋能。
关于macro的原理可参考:https://blog.csdn.net/raoxiaoya/article/details/103897235

首先看 Illuminate\Support\Collection 类:
引入了Macroable,因此具备可改造的能力。

use Macroable; // Illuminate\Support\Traits\Macroable

那么应该在某个地方使用了 Collection::mixin() 或者 Collection::macro() 来为 Collection 赋能,仔细想想
此Excel插件和Laravel框架的结合点,我们只是配置了providers,那么我们去看Illuminate\View\ViewServiceProvider
在register方法中:

Collection::mixin(new DownloadCollection);
Collection::mixin(new StoreCollection);

可见它给Collection类注入了两个对象,那么这两个对象的所有方法都可以被Collection对象使用。实际上它们都只是提供了一个
方法,都返回闭包,分别是:

downloadExcel()
storeExcel()

其实就是在闭包内创建了导出数据模型,而且都是 collection模型,比如:

public function storeExcel()
{return function (string $filePath, string $disk = null, string $writerType = null, $withHeadings = false) {$export = new class($this, $withHeadings) implements FromCollection, WithHeadings {...};return $export->store($filePath, $disk, $writerType);};
}

可以看到,虽然是collection模型,但是并没有实现接口 WithStrictNullComparisonWithCustomStartCell

那么对于数组模型,只需要将数组转成collection就可以了。

示例:

function test7(){$coll = MapCity::take(10)->get();$coll->storeExcel('map/collection2.xlsx');$cellData = [['学号', '姓名', '成绩'],['10001', 'AAAAA', '99'],['10002', 'BBBBB', '92'],['10003', 'CCCCC', '95'],['10004', 'DDDDD', '89'],['10005', 'EEEEE', '96'],];(new Collection($cellData))->storeExcel('map/array2.xlsx');
}

对于 downloadExcel() 方法 也是一样的操作。

Laravel集成Maatwebsite-Laravel-Excel最新版本v3相关推荐

  1. 终于盼来了,2BizBox最新版本 v3.5.0版本正式发布

    转发一下,确实很强大啊... 关键是还免费... 2BizBox最新版本 v3.5.0版本正式发布 为了让大家能够度过一个愉快.祥和的5.1假期,2BizBox团队不辞辛苦.全体发力,最新版本 v3. ...

  2. 《测量助理》最新版本V3.0.220618发布更新

    测量助理软件主要功能:公路路线参数辅助计算.批量计算直线.曲线逐桩坐标.竖曲线高程,坐标正反算.角度换算.内插法计算.线路主点切线方位角计算.曲线参数计算.高斯正反算.换带计算.四参数坐标转换.七参数 ...

  3. python软件-Python软件下载|Python最新版本v3.5.1 下载_当游网

    Python这款软件是一款非常容易上手的计算机程语言设计软件,这款软件对于编程人员来说非常好用,可以让编程人员快速编写代码,而且编写的代码运行速度会非常快速,非常不错.而且这款软件编写的语言非常简洁, ...

  4. 《测量助理》最新版本V3.0.221215发布更新

    主要功能 基本测设 公路路线参数辅助计算.批量计算直线.曲线逐桩坐标.竖曲线高程计算.批量坐标正反算.批量角度单位换算.桥台锥坡计算.花瓶墩计算.高斯正反算.换带计算.大地坐标与空间直角坐标互相转换. ...

  5. python 最新版本(V3.8.8_32bit)安装教程

    文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...

  6. laravel 框架maatwebsite/excel拓展导出excel增加sheets分页功能

    laravel的maatwebsite/excel是一个功能很强大的插件,但是文档相对简单了点 怎么引入插件就不写了,composer地址:maatwebsite/excel - Packagist ...

  7. laravel中maatwebsite/excel的load不可以用的解决办法

    今天项目需要提取excel的内容,composer require maatwebsite/excel: 下边开始代码部分 public function readFile(\Maatwebsite\ ...

  8. php laravel导入excel,Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

    @H_404_0@ 1.简介 @H_404_0@本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍 ...

  9. 关于laravel下composer安装excel插件

    关于laravel下composer安装excel插件的日志 自己为了今后方便,记录下来一下信息.我不知道别人喜不喜欢,我自己研究而已.如果你有意无意看到了,喜欢就看看吧.不喜欢就离开好了,我不介意你 ...

最新文章

  1. windows使用.NET CORE下创建MVC,发布到linux运行
  2. 不扶好眼镜,请别打开这本挑战JS语言特性的书
  3. 在Windows下使用MinGW静态编译Assimp
  4. typedef的用法
  5. 1066 图像过滤 (15 分)
  6. oracle日志查看问题?
  7. 第一周:深度学习引言(Introduction to Deep Learning)
  8. python的运行环境_python-运行环境配置-1
  9. 深入理解Netscaler INat
  10. java 里的 循环不变式 百度百科,循环不变式
  11. 小米路由 php 服务器,小米路由器在后台不停访问小米服务器发送设备信息,继续分析发现不止如此,还......
  12. IntelliJ IDEA类注释模板设置
  13. Linux Kernel代码艺术——数组初始化
  14. .net excel循环插数据_[PaperReading]MEMC-Net 运动估计和运动补偿网络
  15. js 正则 exec() 和 match() 数据抽取
  16. redis 验证订单_php+redis消息队列实现抢购功能
  17. oracle分区实战,Oracle分区实战分享
  18. 【大数据面试题】Flink第一弹60连发
  19. 《量子保密通信技术白皮书》
  20. linux4.12 交叉编译链,交叉编译工具链(很详细)

热门文章

  1. 【逗老师的无线电】MMDVM添加4G网卡之后变身4G路由器
  2. PC端桌面倒计时提醒软件
  3. 经典供货保密协议模板
  4. XPS 13 9360 升级SSD, 迁移WIN10系统, 以及Acronis使用和Win10PE系统安装流水
  5. UEFI Handle与Protocol
  6. Unity——IK动画契合匹配初体验
  7. Eclipse Debug setp into无法进入源码中的解决办法
  8. Unity 2D《打地鼠》游戏自学总结
  9. 4.4.4求解迷宫问题
  10. JS中 forEach 方法添加属性遇到 “obj“ is not extensible 的解决方法 (不可扩展、密封、冻结的对象添加属性)