抛出问题
Excel导入是运营批量任务常用的方法之一,但是代码在识别Excel的时候,获取方式不正确,或者Excel设置有问题的话,就会造成大量无用的处理请求,耽误代码执行的效率,例如:代码识别的时候,连同Excel的空白行都识别进去,处理的时候也处理空白行
,今天我遇到的就是这样的问题,Excel识别到了6万多行,导致程序循环也打算循环6万多行,然后504超时
了
处理问题
$filetype = $res["ext"] == "xlsx" ? "Excel2007" : "Excel5";
$objReader = PHPExcel_IOFactory::createReader($filetype);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($this->dir_root.$res["filename"]);
$currentSheet = $objPHPExcel->getSheet(0);
$allColumn = $currentSheet->getHighestColumn(); //获取列数
$allRow = $currentSheet->getHighestRow(); //获取行数
如上图代码片,getHighestRow()
方法获取的是Excel的行数,打印出来是6万多行,我们怎么处理这些呢,还是追本溯源,处理Excel将Excel尽可能的删除空白行,百度了解到的是:
选中首行的空白位置,然后
shift + ctrl + ↓
组合键,选中所有的空白行,然后右击删除
,最重要的步骤来了,保存 保存 保存
最要的话说三遍,保存完毕之后,就可以导入了,如果你再打开看的话,也不要死命的滚下拉键哈,然后处理数据就是当前页的数据。
拓展
既然是csv,那就没必要使用PHPExcel了哈,这个开源库,太耗内存了,之前我用的是这个库,https://packagist.org/packages/league/csv(貌似只支持PHP7),demo我就不写了,自己去文档里面找,导入几十万条都没压力,不谢哈。
再介绍一个,https://packagist.org/packages/league/csv,没压力哈,建议题主先去了解一下csv是什么东东,我们甚至可以自己写一个csv导入类,感觉最高效&轻量级。