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." ";
}
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." ";
}
echo "<br />";
}
解決辦法的原理就是能夠確保列的循環能夠順利的進行,上面固定列出來數組只是方便理解,具體操作可以對$allCloumn進行處理動態獲取列的相關數據。