Laravel集成Maatwebsite-Laravel-Excel最新版本v3
github:https://github.com/Maatwebsite/Laravel-Excel
参考文档:https://docs.laravel-excel.com/3.1/getting-started/installation.html
- 安装
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
- 使用
全部方法:
/*** @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模型,但是并没有实现接口 WithStrictNullComparison
和 WithCustomStartCell
。
那么对于数组模型,只需要将数组转成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相关推荐
- 终于盼来了,2BizBox最新版本 v3.5.0版本正式发布
转发一下,确实很强大啊... 关键是还免费... 2BizBox最新版本 v3.5.0版本正式发布 为了让大家能够度过一个愉快.祥和的5.1假期,2BizBox团队不辞辛苦.全体发力,最新版本 v3. ...
- 《测量助理》最新版本V3.0.220618发布更新
测量助理软件主要功能:公路路线参数辅助计算.批量计算直线.曲线逐桩坐标.竖曲线高程,坐标正反算.角度换算.内插法计算.线路主点切线方位角计算.曲线参数计算.高斯正反算.换带计算.四参数坐标转换.七参数 ...
- python软件-Python软件下载|Python最新版本v3.5.1 下载_当游网
Python这款软件是一款非常容易上手的计算机程语言设计软件,这款软件对于编程人员来说非常好用,可以让编程人员快速编写代码,而且编写的代码运行速度会非常快速,非常不错.而且这款软件编写的语言非常简洁, ...
- 《测量助理》最新版本V3.0.221215发布更新
主要功能 基本测设 公路路线参数辅助计算.批量计算直线.曲线逐桩坐标.竖曲线高程计算.批量坐标正反算.批量角度单位换算.桥台锥坡计算.花瓶墩计算.高斯正反算.换带计算.大地坐标与空间直角坐标互相转换. ...
- python 最新版本(V3.8.8_32bit)安装教程
文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...
- laravel 框架maatwebsite/excel拓展导出excel增加sheets分页功能
laravel的maatwebsite/excel是一个功能很强大的插件,但是文档相对简单了点 怎么引入插件就不写了,composer地址:maatwebsite/excel - Packagist ...
- laravel中maatwebsite/excel的load不可以用的解决办法
今天项目需要提取excel的内容,composer require maatwebsite/excel: 下边开始代码部分 public function readFile(\Maatwebsite\ ...
- php laravel导入excel,Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
@H_404_0@ 1.简介 @H_404_0@本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍 ...
- 关于laravel下composer安装excel插件
关于laravel下composer安装excel插件的日志 自己为了今后方便,记录下来一下信息.我不知道别人喜不喜欢,我自己研究而已.如果你有意无意看到了,喜欢就看看吧.不喜欢就离开好了,我不介意你 ...
最新文章
- windows使用.NET CORE下创建MVC,发布到linux运行
- 不扶好眼镜,请别打开这本挑战JS语言特性的书
- 在Windows下使用MinGW静态编译Assimp
- typedef的用法
- 1066 图像过滤 (15 分)
- oracle日志查看问题?
- 第一周:深度学习引言(Introduction to Deep Learning)
- python的运行环境_python-运行环境配置-1
- 深入理解Netscaler INat
- java 里的 循环不变式 百度百科,循环不变式
- 小米路由 php 服务器,小米路由器在后台不停访问小米服务器发送设备信息,继续分析发现不止如此,还......
- IntelliJ IDEA类注释模板设置
- Linux Kernel代码艺术——数组初始化
- .net excel循环插数据_[PaperReading]MEMC-Net 运动估计和运动补偿网络
- js 正则 exec() 和 match() 数据抽取
- redis 验证订单_php+redis消息队列实现抢购功能
- oracle分区实战,Oracle分区实战分享
- 【大数据面试题】Flink第一弹60连发
- 《量子保密通信技术白皮书》
- linux4.12 交叉编译链,交叉编译工具链(很详细)
热门文章
- 【逗老师的无线电】MMDVM添加4G网卡之后变身4G路由器
- PC端桌面倒计时提醒软件
- 经典供货保密协议模板
- XPS 13 9360 升级SSD, 迁移WIN10系统, 以及Acronis使用和Win10PE系统安装流水
- UEFI Handle与Protocol
- Unity——IK动画契合匹配初体验
- Eclipse Debug setp into无法进入源码中的解决办法
- Unity 2D《打地鼠》游戏自学总结
- 4.4.4求解迷宫问题
- JS中 forEach 方法添加属性遇到 “obj“ is not extensible 的解决方法 (不可扩展、密封、冻结的对象添加属性)