laravel框架excel扩展包maatwebsite-excel升级3.1版本兼容处理
maatwebsite/excel
2.1版本与3.1版本写法差别有点大,不能同时使用,下面是旧方法升级新方法的调整
单Sheet导入
旧的写法使用新的扩展包导入会报错Call to undefined method Maatwebsite\Excel\Facades\Excel::load()
,解决方法
旧版本:
$file = $request->file('exfile');Excel::load($file, function($reader) use ($data){$reader = $reader->getSheet(0); //获取excel的第1张表$results = $reader->toArray(); //获取表中的数据......});
新版本:
$file = $request->file('exfile');$import = new Import();$path = storage_path('app').'/'.$file->store('temp');Excel::import($import, $path);$results = $import->data->toArray();......
Import.php
代码如下,根据实际命名空间调整:
<?phpnamespace App;use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;/*** Class Import* @package App*/
class Import implements ToCollection
{public $data;public function __construct(){}/*** @param Collection $rows*/public function collection(Collection $rows){$this->data = $rows;}}
注意:上面的写法只能读取到最后的Sheet,如果有空的Sheet请删除,只保留一个工作Sheet
,不然会影响读取结果。
多Sheet导入
创建一个继承多sheet类MultipleImport.php
,如果已存在则不需要创建,同样用到上面的Import.php
,MultipleImport.php
代码内容如下
<?phpnamespace App;use Maatwebsite\Excel\Concerns\WithMultipleSheets;class MultipleImport implements WithMultipleSheets
{public $sheet;public $sheetCount;/*** UserImport constructor.* @param int $sheetCount sheet数量*/public function __construct($sheetCount){$this->sheetCount = $sheetCount;}public function sheets(): array{for ($i = 0; $i < $this->sheetCount; $i++) {$this->sheet[$i] = new Import();}return $this->sheet;}
}
在控制器中使用:
$file = $request->file('exfile');
$import = new MultipleImport(3);
Excel::import($import, $file->getRealPath());
$results = $import->sheet[0]->data->toArray();
$results2 = $import->sheet[1]->data->toArray();
$results3 = $import->sheet[2]->data->toArray();
dd($results,$results2,$results3);
导出excel
创建文件Export.php
<?php
namespace App;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\Border;
class Export implements FromCollection,WithHeadings, WithEvents
{protected $data;protected $headings;protected $columnWidth = [];//设置列宽 key:列 value:宽protected $rowHeight = []; //设置行高 key:行 value:高protected $mergeCells = []; //合并单元格 value:A1:K8protected $font = []; //设置字体 key:A1:K8 value:Arialprotected $fontSize = []; //设置字体大小 key:A1:K8 value:11protected $bold = []; //设置粗体 key:A1:K8 value:trueprotected $background = []; //设置背景颜色 key:A1:K8 value:#F0F0F0Fprotected $vertical = []; //设置定位 key:A1:K8 value:centerprotected $sheetName; //sheet titleprotected $borders = []; //设置边框颜色 key:A1:K8 value:#000000//设置页面属性时如果无效 更改excel格式尝试即可//构造函数传值public function __construct($data, $headings,$sheetName){$this->data = $data;$this->headings = $headings;$this->sheetName = $sheetName;$this->createData();}public function headings(): array{return $this->headings;}//数组转集合public function collection(){return new Collection($this->data);}//业务代码public function createData(){$this->data = collect($this->data)->toArray();}/*** @return array* [* 'B' => 40,* 'C' => 60* ]*/public function setColumnWidth (array $columnwidth){$this->columnWidth = array_change_key_case($columnwidth, CASE_UPPER);}/*** @return array* [* 1 => 40,* 2 => 60* ]*/public function setRowHeight (array $rowHeight){$this->rowHeight = $rowHeight;}/*** @return array* [* A1:K7 => '宋体'* ]*/public function setFont (array $font){$this->font = array_change_key_case($font, CASE_UPPER);}/*** @return array* @2020/3/22 10:33* [* A1:K7 => true* ]*/public function setBold (array $bold){$this->bold = array_change_key_case($bold, CASE_UPPER);}/*** @return array* @2020/3/22 10:33* [* A1:K7 => F0FF0F* ]*/public function setBackground (array $background){$this->background = array_change_key_case($background, CASE_UPPER);}/*** @return array* [* A1:K7* ]*/public function setMergeCells (array $mergeCells){$this->mergeCells = array_change_key_case($mergeCells, CASE_UPPER);}/*** @return array* [* A1:K7 => 14* ]*/public function setFontSize (array $fontSize){$this->fontSize = array_change_key_case($fontSize, CASE_UPPER);}/*** @return array* [* A1:K7 => #000000* ]*/public function setBorders (array $borders){$this->borders = array_change_key_case($borders, CASE_UPPER);}
}
在控制器中调用导出下载:
use App\Export;
use Maatwebsite\Excel\Facades\Excel as LaravelExcel;$data = [];//导出数据
$head = [];//第一行的列标题
$filename = 'excel';//导出文件名,中文好像有乱码
$excel = new Export($data, $head , 'Sheet1');
return LaravelExcel::download($excel, $filename . date('Y-m-d') . '.xls');
注意:download
方法只能在控制器中使用
laravel框架excel扩展包maatwebsite-excel升级3.1版本兼容处理相关推荐
- 【php-laravel框架】第二节:laravel常用的扩展包汇总及安装教程
教程说明:laravel的常用扩展包汇总及安装方式. 使用版本:laravel5.5 lts版本 集成环境:phpstudy[windows推荐].宝塔windows面板[linux推荐] IDEA编 ...
- Voyager 1.2.3 发布,Laravel 后台管理扩展包
开发四年只会写业务代码,分布式高并发都不会还做程序员? Voyager 1.2.3 发布了,Voyager 是一个强大.快捷的 Laravel 后台管理扩展包,提供了 CRUD 操作.媒体管理.菜 ...
- mysql56401_一款你不容错过的Laravel后台管理扩展包 —— Voyager
一款你不容错过的Laravel后台管理扩展包 -- Voyager 由 学院君 创建于4年前, 最后更新于 4个月前 版本号 #3 43101 views 16 likes 0 collects 1. ...
- Laravel扩展包下载excel
composer require maatwebsite/excel 默认安装最新得版本,下面我使用得是2.1版本的 在config/app.php中注册服务提供者到providers数组: Maat ...
- Laravel框架使用maatwebsite/excel导出自动换行
Laravel框架使用maatwebsite/excel导出自动换行 maatwebsite/excel 版本:2.1 $sheet->getStyle("A6:F6")-& ...
- 下载量最高 100 个 Laravel 扩展包推荐
本文经授权转自 PHPHub 社区,后续更新将以 PHPHub 帖子内容 和 GitHub 内容 为准. 说明 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的, ...
- 下载量最高的 100 个 Laravel 扩展包推荐
Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态. 本文对 Packagist 上打了 Laravel 标签 的扩展包进行整理,截止到现在 2 ...
- 【转】下载量最高的 100 个 Laravel 扩展包推荐
说明 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态. 本文对 Packagist 上打了 Laravel 标签 的扩展包进行整理,截止到现 ...
- laravel-excel maatwebsite excel 导入的中文文档
项目里需要导入了,正好 3.1 版本,也支持导入了,补充下 excel 导入的翻译文档.(工作比较忙,大概过了一遍,可能有不少错误的地方)1.5分钟快速入门在 app/Import 创建一个导入类ph ...
最新文章
- as3.0中如何阻止事件冒泡?
- SMB(Server Message Block) Protocal Research
- 【SeeMusic】视频编辑 ( 视频 X 坐标 | 视频 Y 坐标 | 视频旋转 | 视频扭曲 )
- 一个用JAVA实现的线段树类--泛型 重构.
- hdu 5112 A Curious Matt
- 机器学习算法总结之Boosting:Boosting Tree、GBDT
- 微信小程序+java后台
- 教务系统mysql注入的原理_SQL注入原理及具体步骤
- WPS实现公式居中同时编号对齐
- 身份证号码 如何把格式设置成18个格子
- java抽奖活动_java抽奖思路
- mce:style或者mcs:script是什么意思
- Windows 安装 Docker
- 【C语言】机试100题及代码答案(上)
- 细思极恐---十年生死两茫茫,通信人,意欲亡。
- HTTP POST 请求工具类
- 关于神经网络每次预测结果不一样的问题
- BZOJ 2709 Violet 1 迷宫花园
- 建立数据驱动的人力资源管理:以红海云eHR系统为例
- SEED-XDS560v2 驱动
热门文章
- IPP库的安装以及源码分析方法
- Linux刻录光盘win10认不到,Windows10系统读不取DVD光驱和刻录光盘
- tp5原生SQL:读操作(query方法)
- 「跑象科技」获得天使+融资,打造新一代实时数据基础平台
- 初识C语言(三)--最终章,万字解析,趣味讲解完C语言的最后知识点
- LocalDateTime计算时间差
- 异常解决:cococaption包出现找不到edu.stanford.nlp.semgraph.semgrex.SemgrexPattern错误
- cjk-ext-e 字体
- 微信小程序开发者工具error:用户绑定的手机需要进行验证,请在客户端完成短信验证
- 快速调用编辑器来写一条长,复杂或难的命令--用Enki学Linux系列(5)