最近公司做一個客戶導入會員的功能,以前導入都是使用csv格式導入的,但是客戶反應問題挺多的,普遍是亂碼(由於各種系統各種環境可能引起編碼問題)。最近想着就把這個導入完全改成excel導入,就研究了下phpexcel,發現讀取excel還是挺方便的,這樣也方便客戶了,比較excel 無論用office 還是 wps 打開都是沒有問題的
示例讀取代碼如下
/* * $path excel文件路徑 * $header_mapping 文字和數據庫字段的對應關系 * excel第一行 是 字段標准(通常是漢字), * example * $header_mapping = [ '姓名' => 'uid' ]; * */ private function readExcel( $path,$header_mapping = []){ $objPHPExcel = PHPExcel_IOFactory::load( $path ); //選擇標簽頁 $sheet = $objPHPExcel->getSheet(0); //獲取行數與列數,注意列數需要轉換 $highestRowNum = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn); $usefullColumnNum = $highestColumnNum; //取得字段,這里測試表格中的第一行為數據的字段,因此先取出用來作后面數組的鍵名 $filed = array(); for($i=0; $i<$highestColumnNum;$i++){ $cellName = PHPExcel_Cell::stringFromColumnIndex($i).'1'; $cellVal = $sheet->getCell($cellName)->getValue();//取得列內容 if( !$cellVal ){ break; } $usefullColumnNum = $i; $filed []= $cellVal; } //開始取出數據並存入數組 $data = []; for( $i=2; $i <= $highestRowNum ;$i++ ){//ignore row 1 $row = array(); for( $j = 0; $j <= $usefullColumnNum;$j++ ){ if( !isset($header_mapping[ $filed[$j] ]) ){ continue; } $cellName = PHPExcel_Cell::stringFromColumnIndex($j).$i; $cellVal = $sheet->getCell($cellName)->getValue(); if($cellVal instanceof PHPExcel_RichText){ //富文本轉換字符串 $cellVal = $cellVal->__toString(); } $fd = $header_mapping[ $filed[$j] ]; $row[ $fd ] = $cellVal; } $data []= $row; } return $data; } /* * excel日期轉化 * excel中日期讀取出來是個數字,需要轉化 **/ private function excelTime( $date ){ $date = date("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($date) ); return $date; }
演示界面截圖
phpexcel地址
https://github.com/PHPOffice/PHPExcel
注意事項
1:日期格式處理 ,處理如下
//phpexcel 讀取日期格式出來是個數字 $date = date("Y-m-d",PHPExcel_Shared_Date::ExcelToPHP($date) );
2:長整形處理
//php讀取excel長整形會以科學計數法記錄 number_format( $val,0,'','');
原文地址: phpexcel 讀取數據
標簽: phpexcel read 讀取