PHPExcel讀取excel數據

require_once 'PHPExcel.php'; 
$PHPReader = new PHPExcel_Reader_Excel2007(); 
$filePath = 'wjyl.xlsx'; 
if(!$PHPReader->canRead($filePath)){
    $PHPReader = new PHPExcel_Reader_Excel5();//讀取舊版本
}  
$PHPExcel = $PHPReader->load($filePath);//讀取Excel文件  
$sheetCount = $PHPExcel->getSheetCount();//獲取工作表的數目
for($s = 0; $s < $sheetCount; $s++){
    echo '<b>這是表'.$s."</b><br />";
    $currentSheet = $PHPExcel->getSheet($s); //讀取excel工作表
     $allColumn = $currentSheet->getHighestColumn(); //取得最大的列号
     $allRow = $currentSheet->getHighestRow();//取得一共有多少行
     for($currentRow = 2; $currentRow < $allRow; $currentRow++){
        for($currentColumn= 'A';$currentColumn < $allColumn; $currentColumn++){
            $val = $currentSheet->getCell($currentColumn.$currentRow)->getValue();
            echo $val."&nbsp;&nbsp;&nbsp;";
        }
        echo "<br />";     
    }
}
echo 'Well Done!!!'; exit; /**如果输出汉字有乱码,则需将输出内容用iconv函数进行编码转换,如下将gb2312编码转为utf-8编码输出*/ //
echo iconv('utf-8','gb2312', $val);

 

當excel表的總列數超過了26的時候,也就是超過了Z的時候,再繼續增加就上升為AA,AB,AC......AZ格式,在這種情況下,上面代碼在列循環只會循環第一個A。

了解字母比較:

字母的比較,實際上是字母在ASCII表中所對應的10進制數字大小的比較,例如A 的 ASCII表中十進制對應數字為65,Z的為90;

echo ord('A');//65
echo ord('Z');//90

比較規則:

A與AB比較,首先,A與AB中的A比較,由於相等,則跳過A,繼續與B比較,得出

echo 'A' < 'AB' ? 1 : 0;//1

A與AA比較,先進行字母逐個比較,當每個都相等的情況下,最後進行字符串的長度對比,得出

echo 'A' < 'AA' ? 1 : 0;//1

A與BA比較,首先A與B比較,A小於B,得出結果

 

echo 'A' < 'BA' ? 1 : 0;//1

 

得出結果:
例如上面最後一列為AP,A首先會與allRow中的第一個字母進行比較,相同字母跳過,再與第二個字母比較,A<P,進入循環,執行完第一次代碼之後,列數增加,此時為B與AP比較,由於B>A,所以第一個字母判斷就不成立,退出循環。

解決辦法:

 

$ColumnArr = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP');
for($currentRow = 2;$currentRow <= $allRow;$currentRow++){ 
    for($c_Column= 0;$c_Column < count($ColumnArr); $c_Column++){
        $val = $currentSheet->getCell($ColumnArr[$c_Column].$currentRow)->getValue();
        echo $val."&nbsp;&nbsp;&nbsp;";
    } 
    echo "<br />"; 
 }

解決辦法的原理就是能夠確保列的循環能夠順利的進行,上面固定列出來數組只是方便理解,具體操作可以對$allCloumn進行處理動態獲取列的相關數據。

posted @ 2013-07-25 16:30  Vhelin  阅读(462)  评论(0编辑  收藏  举报