phpExcel 读取数据,大数据文件处理方案

phpExcel 读取数据,大数据文件处理方案


    /**
     *  读取 Excel 文件
     * @param  string  $filePath  要读取的路径
     * @param  integer $sheet     要读取的工作列表
     * @return array            
     * @author lianggc 2016-09-06
     */
    public function load($filePath='',$sheet=0){
        $PHPReader=new PHPExcel_Reader_Excel2007;
         if(!$PHPReader->canRead($filePath)){
                $PHPReader = new PHPExcel_Reader_Excel5();
                if(!$PHPReader->canRead($filePath)){
                        echo 'no Excel';
                        return ;
                }
        }
        $PHPExcel = $PHPReader->load($filePath);        //建立excel对象
        $currentSheet = $PHPExcel->getSheet($sheet);        //**读取excel文件中的指定工作表*/
        $allColumn = $currentSheet->getHighestColumn();        //**取得最大的列号*/
        //lianggc 2016-10-08 修改 支持 Z以后的列数
        $allColumn= PHPExcel_Cell::columnIndexFromString($allColumn);//**取得最大的列号*/
        $allRow = $currentSheet->getHighestRow();        //**取得一共有多少行*/
        $data = array();
        for($rowIndex=1;$rowIndex<=$allRow;$rowIndex++){        //循环读取每个单元格的内容。注意行从1开始,列从A开始
                for($column=0;$column<$allColumn;$column++){
                    //通过数字获取对应 列号
                    $colIndex = PHPExcel_Cell::stringFromColumnIndex($column);
                    $addr = $colIndex.$rowIndex;//对应下标
                    $cell = $currentSheet->getCell($addr)->getValue();//获取对应值
                    if($cell instanceof PHPExcel_RichText){ //富文本转换字符串
                            $cell = $cell->__toString();
                    }
                    $data[$rowIndex][$colIndex] = $cell;
                }
        }
        return $data;
    }

excel_data 这个变量里面保存的是 获取指定的 工作表数据。

如果调用Load没有第二个参数默认是获取第一个工作表

如果要读取大文件,这种方法我不推荐。如果说你要处理的excel超过2000行左右 你就会发现他调用Load方法的时候会很缓慢(我这边开启xdebug 发现读取200k的文件,debug log生成为 356mb 可怕)。phpexcel 如果要处理的文件大于1mb的情况下 进行读取操作比较浪费系统资源。

如果有可能先转换为csv文件。然后再进行读取操作。这么搞效率最少高了5倍以上

你可能感兴趣的:(php)