PHPExcel 读取百万级、千万级Excel文件数据的方法,按每行读取数据,使用yield生成器技术

1、先将百万级别的excel 数据按每行读取,每读取一行记录一条,将其存储在yield生成器中,不占用内存,读一条取一条。

public static function actionExcelData()
    {
        set_time_limit(0);
        ini_set("memory_limit", "1024M");
        $excelInfo['path'] = '/file/456.xlsx';
        $inputFileType = IOFactory::identify($excelInfo['path']);
        $objReader = IOFactory::createReader($inputFileType);
        $worksheetNames = $objReader->listWorksheetNames($excelInfo['path']);
        #只读取表格数据,忽略里面的各种格式,否则会内存耗尽
        $objReader->setReadDataOnly(TRUE);
        $objReader->setLoadSheetsOnly($worksheetNames[0]);#笔者此处加载第11个sheet
        $objPHPExcels = $objReader->load($excelInfo['path']);
        $maxCol = $objPHPExcels->getSheet(0)->getHighestColumn();#总列数
        $maxCol = 'I';
        $maxRow = $objPHPExcels->getSheet(0)->getHighestRow();#总行数
        $a = 'A';
        for ($i = 1; $i <= $maxRow; $i++) {
            yield  $objPHPExcels->getSheet(0)->rangeToArray('A' . $i . ':' . $maxCol . $i)[0];#读取一行
            $a++;
        }
    }

2、遍历方法:

  $titleExcels = self::getExcelTitle();#可以把$titleExcels 当做一个千万级别的数组,按每行的值作为数组的一个value。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值