Welcome! 登入 註冊
美寶首頁 美寶百科 美寶論壇 美寶落格 美寶地圖

Advanced

PHPExcel 讀取「時間格式」的儲存格內容

PHPExcel 讀取「時間格式」的儲存格內容

分類標籤: 程式設計
若 $sheet 是 PHPExcel 裡的一個「工作表」物件

我們知道

$sheet -> getCell('A1') -> getValue()

可以讀出 A1 儲存格的內容


但是 如果 儲存格 A1 是日期格式,以上面的陳述讀出的 資料會是「數字」,而不是「日期」
這個「數字」代表的是 1900-1-1 到該日期的天數

例如:
如果該日期是 1900-1-1 則讀出的是 數字 1
如果該日期是 2000-1-4 則讀出的是 數字 36529


這並不是「日期」,而是個「數字」,而且這個數字 跟 php 的日期也不好轉換

網路有一個 抄來抄去版的函數 做了這個轉換 原始作者已不可考
名稱為 function excelTime($days, $time=false)


但其實 PHPExcel 其實已經提供了 這種轉換的函數,方法如下:


$number = $sheet -> getCell('A1') -> getValue()

//上面這個陳述 得到 1900-1-1 到該日期的天數 ( 如上述)
//例如:如果 A1 是 2000/1/1 ,則 $number = 36529 (天)



$t = PHPExcel_Shared_Date::ExcelToPHP( $number )

//重點來了,上面這個函式會將 1900-1-1以來的天數 轉換成 1970-1-1 以來的秒數
//也就是搭起了 Excel 和 PHP 之間的橋梁
//例如:
//接上例,如果 $number = 36529(天) ,則 $t = 946944000 (秒)




//接著 這個 $t 就可以利用 php 的函式 發揮了
//例如

$a = date( Y-m-d, $t )

//如果原來的 A1 是 2000/1/1
//則
// $number = 36529 (天)
// $t = 946944000 (秒)
// $a = 2000-1-1
// 原來在 Excel 裡的日期 在 網頁中 又顯示回來了



Edited 2 time(s). Last edit at 09/11/2012 04:13AM by RandomVariable.
(編輯記錄)