技术栈:php laravel maatwebsite/excel
问题描述 :用户上传excel表格,php程序读取表格数据,由于表格不规范出现大量空行数据(列和行都存在同样的问题),导致读取表格数据时内存溢出
解决方案:已经定位到问题是由于表格空行引起的,就从去掉空行数据入手解决,上代码
我是使用Excel的import读取表格数据的第一个参数是我们自己定义的表格数据处理实现类用来接收读取的数据
FixedImport处理类如下:
我们的处理类必须实现以上的三个接口类
ToCollection 定义接收到数据类型(这里是集合)
WithColumnLimit 实现了此类则可以限制到读取到的最大列
这里就强制要求我们的处理类实现endColumn方法我的表头如下,所有我定义了endColumn方法并返回k
SkipsEmptyRows 则是跳过空行,实现了该类则启用该规则
包代码的实现:不论你要求的返回类型是ToCollection或ToArray都会走到toArray方法
总结:以上方法仅适用了我在实际业务场景中限制表格20000条操作,并且生产服务器的运行内存是2个G,如果有更大数据量的要求建议走WithChunkReading,这个方法实现了异步分块读取数据