關於PHPEXCEL讀取excel表的使用及過程中需要解決的問題

如今遇到使用PHPEXCEL讀取EXCEL的開發,雖然網上大家都供獻了很多不錯的源碼,不過遇到自己開發時也得根據自己的情況來使用並解決一些問題。這裏把我在此開發過程中使用的方法及遇到的問題發佈出來,方法能在這一篇文章中解決更多的問題。

一、PHPEXCEL的使用

使用PHPEXCEL需要先下載PHPEXCEL文件包,本文配備了文件包方便大家下載測試,也可以根據需要網上找更新的版本。

function import_level1() {
	
		$filename=trim($_POST['file']);//讀取excel文件
		$filePath="/home/ftp/c/chinajxedu_news/wwwroot/uploadfile/excel/".$filename;//指定文件路徑
		require_once('/home/ftp/c/chinajxedu_news/wwwroot/phpcms/excel/PHPExcel/IOFactory.php');//引入excel文件庫

		if($dosubmit){
			$PHPReader = new PHPExcel_Reader_Excel5();
					 if(!$PHPReader->canRead($filePath)){   
						 $PHPReader = new PHPExcel_Reader_Excel5();   
							   if(!$PHPReader->canRead($filePath)){         
									echo 'no Excel';  
									 return ;   
							   }  
					  }

			$PHPExcel = $PHPReader->load($filePath);  

			$currentSheet = $PHPExcel->getSheet(0);  /**取得一共有多少列*/

			$allColumn = $currentSheet->getHighestColumn();     /**取到多少列*/  

			$allRow = $currentSheet->getHighestRow();
			
			
			for( $currentRow = 2 ; $currentRow <= $allRow ; $currentRow++){

					  $flag = 0;
					  $col = array();
						for($currentColumn='A'; $this->getascii($currentColumn) <= $this->getascii($allColumn) ; $currentColumn++){
							$address = $currentColumn.$currentRow;   
							$string = $currentSheet->getCell($address)->getValue();
							$col[$flag] = $string;
							$flag++;
					  }
					 
					//插入數據
					if($col)
					{
						
						//這裏可以取$col數組中的值構建要插入數據庫的數組對象。
						
					}
				 //print_r($col);
			}

			}
	}

此方法使用的方式是對要導入的excel文件採用指定絕對地址的方法,大家可以根據情況增加上傳文件到服務器的功能,總之需要指定準確的文件路徑及名稱。excel版本建議爲97-2003(.xls),xlsx應該也可以,沒測試,使用的朋友你可以試一下。

二、使用中遇到的幾個問題 

1、在循環讀取excel中getascii方法必須使用,否則只會讀取第一列的數據,列無法循環下去。 

	public function getascii($ch) {  //讀取字符串的ASCII碼
		if(strlen($ch) == 1)
		return ord($ch)-65;
		return ord($ch[1])-38;

		}

2、如果excel表中有日期,而且需要以時間戳的形式存入到數據表中,則時間日期格式需進行如下處理。

     Excel中的日期存儲的是數值類型,計算的是從1900年1月1日到現在的數值。例如2008-12-31實際上存儲的是39813。可以在       Excel中驗證,首先在一個單元格中輸入2008-12-31,然後將單元格格式修改爲“常規”,然後就會看到單元格內容變成了39813。
 
    Excel中的時間是一個從0到0.99999999之間的小數值,表示從00:00:00(12:00:00 AM)到23:59:59(11:59:59 PM)之間的時間。例如12:00 PM的數值是0.5,表示一天的一半。
 
    Excel 2007版本中提供了24種默認的日期類型格式,其中帶星號的兩個會和系統時區綁定(這樣在不同時區的電腦之間傳遞文件時,時間會發生變化)其他的則不會根據時區發生變化。

    這些信息只做爲一個簡單瞭解,如想了解更多的可以到網上去查,這裏不再多說,以解決實問題爲主。

$d = trim($col[9]);$t = 24 * 60 * 60;
$cometinfo['card_date']=strtotime(gmdate('Y-m-d', ($d-25569) * $t));

因爲excel中返回的是一個數值,所以需要將其進行轉化,轉化方法是通過及$t的運算和gmdate的轉格式。這裏需要注意的時“25569”這個值,如查發現用這個值不能輸出正確的時間,則改用“gmdate('Y-m-d', (41728.732916667 - $d) * $t);”,因爲不同的excel中代表的日期起啓日期不同,有的是1900年,有的則是1970年。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章