2017-04-01 44 views
0

工作在ODS單元格中輸入12:00並獲得缺省時間格式,然後setReadDataOnly(true)getValue(),該值是25569.5,如果格式的單元格的號碼,然後getValue() ,值爲0.5。如何在ODS中看到12:00getValue() = 0.5PHP - PHPExcel setReadDataOnly(真),不與ODS

+0

嗨W.內爾不要使用setReadDataOnly(true),詢問有關問題時,因此,它證明了有益的視覺牛肉提出你的問題,而不是寫下沒有格式化的所有東西此外,與錯誤*共享圖像可能會對其他人有所幫助。 格式化您的代碼(或您的案例中的公式)與「引用內聯」或使用縮進代碼塊一樣簡單。 –

回答

0

你不能看到ODS的日期/時間(或XLSX或XLS等)使用PHPExcel如果你已經使用setReadDataOnly(true) ....

setReadDataOnly(true)整個的一點是,它只有讀沒有任何格式化信息,例如將單元標識爲包含日期/時間值的格式化信息。

Excel將日期/時間值存儲爲序列化時間戳,即自基本開始日期(1900年1月1日或1904年1月1日,取決於日曆設置)以來的天數,作爲浮點值。 將此標識爲日期/時間值的是數字格式掩碼,它指定應該如何顯示該浮點數。

PHPExcel複製這種行爲,如果你與setReadDataOnly(false)加載電子表格,然後getValue()將返回序列化的時間戳,而getFormattedValue()將應用數字格式掩碼和返回格式化的日期/時間字符串。 相反,如果您使用setReadDataOnly(true)加載文件,則代碼無法將此浮點標識爲日期/時間值,或者不知道應如何將其格式化爲浮點格式,因爲您選擇不加載格式信息也可以讓這種識別成爲可能。

TL/DR如果你想PHPExcel能夠識別日期/時間值作爲日期/時間

+0

允許我重新說明這個問題:我在Excel2007單元格中輸入「12:00」,將文件保存爲test.xlsx,當我使用Excel打開test.xlsx時看到「12:00」,然後使用PHP setReadDataOnly true)和getValue(),結果是0.5,它適用於Excel2007。我在Libre Calc單元格中輸入「12:00」,將文件保存爲test.ods,當我使用LibreOffice打開test.ods時看到「12:00」,然後使用setReadDataOnly(true)和getValue()結果是25569.5,它不適用於ODS。如果我將單元格格式化爲test.ods中的數字,則在使用LibreOffice時會看到「0.5」,而getValue()爲0.5。 –

+0

好!您可以在[PHPExcel](https://github.com/PHPOffice/PHPExcel/issues)ODS Reader中將其報告爲錯誤;它應該讀取的值爲0.5,而不是25569.5。然而,它不會被修正爲PHPExcel .... PHPExcel的開發已被下一代[PHPSpreadsheet](https://github.com/PHPOffice/PhpSpreadsheet/issues)的開發所取代。那麼更好地報告那裏的錯誤。 –

+0

謝謝@Mark。我打開了一個問題#1172:PHPExcel ODS Reader getValue()爲Time返回錯誤的數字。 –