php讀取excel列數大于Z時讀取不到
- 背景
- 解決方案
- 關鍵代碼
背景
表格數據超過26列, 也就是在Z列之前沒有AA列及以后的情況, 測試一直都沒有問題,超過,就會獲取不到數據了
解決方案
private function getExcelData(){//獲取excel文件$file = $_FILES['poily']['tmp_name'];//實例化excel處理類$PHPReader = new \PHPExcel_Reader_Excel2007();if (!$PHPReader->canRead($file)) {$PHPReader = new \PHPExcel_Reader_Excel5();if (!$PHPReader->canRead($file)) {return false;}}$PHPExcel = $PHPReader->load($file);$currentSheet = $PHPExcel->getSheet(0);//讀取第一個工作表$allRow = $currentSheet->getHighestRow();//取得一共有多少行//這兩段很重要$allColumn = $currentSheet->getHighestColumn();//取得最大的列號$allColumn = \PHPExcel_Cell::columnIndexFromString($allColumn);//將列數轉換為數字 列數大于Z的必須轉 A->1 AA->27$arr = [];//從第一行開始讀 第一行為標題for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {//從第A列開始輸出for ($currentColumn = 0; $currentColumn < $allColumn; $currentColumn++) {//plan 1//$strColumn = \PHPExcel_Cell::stringFromColumnIndex($currentColumn);//將數字轉換為字母 0->A 26->AA//$val = $currentSheet->getCell($strColumn.$currentRow)->getValue();//plan 2$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();//如果輸出漢字有亂碼,則需將輸出內容用iconv函數進行編碼轉換,如下將gb2312編碼轉為utf-8編碼輸出 $arr[$currentRow][]= iconv('utf-8','gb2312', $val)."\t";//將每列內容讀取到數組中$arr[$currentRow][] = trim($val);}}//刪除全部為空的行foreach ($arr as $key => $vals) {$tmp = '';foreach ($vals as $v) {$tmp .= $v;}if (!$tmp) unset($arr[$key]);}return $arr;}
關鍵代碼
PHPExcel_Cell::columnIndexFromString($allColumn) //將列數轉換為數字 列數大于Z的必須轉 A->1 AA->27