Laravel的excel读取表格内存溢出解决方案

技术栈:php laravel maatwebsite/excel

问题描述 :用户上传excel表格,php程序读取表格数据,由于表格不规范出现大量空行数据(列和行都存在同样的问题),导致读取表格数据时内存溢出

解决方案:已经定位到问题是由于表格空行引起的,就从去掉空行数据入手解决,上代码

我是使用Excel的import读取表格数据的第一个参数是我们自己定义的表格数据处理实现类用来接收读取的数据
FixedImport处理类如下:

 我们的处理类必须实现以上的三个接口类
ToCollection 定义接收到数据类型(这里是集合)
WithColumnLimit 实现了此类则可以限制到读取到的最大列 

这里就强制要求我们的处理类实现endColumn方法我的表头如下,所有我定义了endColumn方法并返回k


SkipsEmptyRows 则是跳过空行,实现了该类则启用该规则

包代码的实现:不论你要求的返回类型是ToCollection或ToArray都会走到toArray方法


总结:以上方法仅适用了我在实际业务场景中限制表格20000条操作,并且生产服务器的运行内存是2个G,如果有更大数据量的要求建议走WithChunkReading,这个方法实现了异步分块读取数据

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值