2013-04-24 48 views
2

細胞我使用PHPExcel讀一個Excel 2007文檔。在這個文檔中有一個帶有「時間」格式的列,它在Excel中正確顯示數據。當我試圖解析這個列時,我會得到一些奇怪的值。任何想法如何解決這個問題?設置正確的閱讀格式與PHPExcel

謝謝。

+0

向我們展示你的代碼,你的輸出錯誤,你需要.. – Svetoslav 2013-04-24 09:07:58

+0

例如什麼,在Excel中顯示的值是「4:48」,在公式欄的值是上午04時48分零零秒,並用解析後PHPExcel,值爲0.2。 – Psyche 2013-04-24 14:19:39

回答

9

解析時,您需要指定列的格式。例如

$my_cell = $objWorksheet->getCellByColumnAndRow(1, 1); 
$my_cell_value = PHPExcel_Style_NumberFormat::toFormattedString($cell->getCalculatedValue(), 'hh:mm:ss'); 
print $my_cell_value; 
+0

是的,它的工作原理!謝謝。 – Psyche 2013-04-24 14:22:50

2

奇怪的值?!?你的意思是你得到一個數字,而不是一個人類可讀的日期字符串....它總是有助於在可能的情況下準確地描述事物,怪異並不是真正的準確描述。

如果你只要從單元格的值,你會讀一原料時間戳值(MS Excel中保存日期和時間值作爲時間戳;像PHP,除了Excel的Unix時間戳值時間戳是自1900年1月1日以來的天數(或1904年1月1日,取決於它配置爲使用哪個日曆)。

MS Excel使用數字格式掩碼將此時間戳顯示爲人類可讀的日期/時間字符串。

可以使用getFormattedValue()方法,而不是簡單的getValue()檢索此作爲格式化日期/時間(getFormattedValue()將單元格的任何數字格式掩碼應用於該值)。 不用等,如果你已經加載了readDataOnly設置爲TRUE的文件,那麼數字格式掩碼不會被加載,所以PHPExcel無法識別單元格是否包含日期。

或者,正如詹姆斯在他的回答也建議,可以通過應用與自己的格式格式化數字掩蓋手動原始時間戳格式化值轉換

第三種選擇是,你可以使用PHPExcxel的內置日期處理功能,這個Excel時間戳值轉換爲PHP/Unix時間戳或到PHP DateTime對象(PHPExcel_Shared_Date :: ExcelToPHP()和PHPExcel_Shared_Date :: ExcelToPHPObject()分別), ,然後就可以顯示使用PHP本身的日期處理功能

2

,因爲它被存儲在Excel中的時間的值實際上是天的分數,所以0.2是24小時(或1 440分鐘或86400秒)乘以0.2。您可以根據該信息計算一天的時間,然後從一天的開始計算。它使得它比格式化的時間更有用,但可讀性更差。