phpExcel 讀取資料,大資料檔案處理方案
阿新 • • 發佈:2019-02-05
/** * 讀取 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倍以上