1. 程式人生 > >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;
    }

直接下載對應的phpExcel 的包就行了上點選跳轉
下載完成 把那個Classes 這個資料夾裡面的 檔案跟資料夾拿出來就好了。
我這邊的這個方法是直接寫到PHPExcel 這個檔案裡面的。呼叫很簡單。引入phpExcel 這個類傳遞對應的excel 檔案的路徑就好了

        $obj  = new PhpExcel;
        $excel_data=$obj->load($file_path);//讀取資料	

excel_data 這個變數裡面儲存的是 獲取指定的 工作表資料。

如果呼叫Load沒有第二個引數預設是獲取第一個工作表

如果要讀取大檔案,這種方法我不推薦。如果說你要處理的excel超過2000行左右 你就會發現他呼叫Load方法的時候會很緩慢(我這邊開啟xdebug 發現讀取200k的檔案,debug log生成為 356mb 可怕)。phpexcel 如果要處理的檔案大於1mb的情況下 進行讀取操作比較浪費系統資源。

如果有可能先轉換為csv檔案。然後再進行讀取操作。這麼搞效率最少高了5倍以上