2015-08-18 26 views
0

我用細胞格式的Excel模板在L列的「自定義」 - > DDMMYYYY
從PHP頁面我打電話PHPExcel對象,並填寫如下:PHPExcel日期沒有破折號,斜線或其他

$objPHPExcel->setActiveSheetIndex(0) 
->setCellValueExplicit('L'.$i, $birthdate, PHPExcel_Cell_DataType::TYPE_STRING); 

(在一個循環中,但對於這個問題並不重要)。
值$ birthdate包含帶短劃線的日期。這就是我想要的...幾乎... =>
當單元格已經寫好並打開excel文件時,我看到所有日期都是 顯示在這個
格式中:dd-mm- YYYY 然而,在該文件中
L列各單元的單元格式仍是「自定義」 - > DDMMYYYY 所以我期望的細胞作爲DDMMYYYY顯示...

爲什麼仍呈現破折號雖然cellformat是ddmmyyyy?

此外...當我點擊值欄(FX背後的那場)的日期後面,
然後按ENTER鍵,然後突然的,單元格顯示日期DDMMYYYY ...
爲什麼不打開文件?以及如何解決它?

回答

0

無意中找到了解決辦法...把日期00:00: 00 UTC =>

$date = DateTime::createFromFormat('d-m-Y', $birthdate); 
$birthdate = $date->format('d-m-Y')." 00:00:00"; 
date_default_timezone_set("UTC"); 
$timestamp = strtotime($birthdate); 
$dateValue = $timestamp; 

    $objPHPExcel->getActiveSheet(0) 
     ->setCellValue('L'.$i, PHPExcel_Shared_Date::PHPToExcel($dateValue)); 
1

因爲您沒有將日期存儲爲Excel日期時間戳記,而是以字符串形式存儲。

要在MS Excel存儲日期,你需要存儲序列化的時間戳值如圖所示的例子

正如/Examples/02types.php

$dateTimeNow = time(); 
$objPHPExcel->getActiveSheet() 
    ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeNow)); 

PHPExcel_Shared_Date::PHPToExcel()表示將轉換爲UNIX時間戳,PHP的DateTime對象或大多數strtotime()可以處理MS Excel序列化時間戳的字符串格式化日期值

編輯

你可能需要做你ddmmyyyy格式的一些操縱,可以很容易地轉換爲DateTime對象的格式:

$dateTimeValue = DateTime::createFromFormat('dMY', '18082015', new DateTimeZone('UTC')); 
$objPHPExcel->getActiveSheet() 
    ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeValue)); 
+0

我沒有更多要說馬克....優秀!你剛剛救了我的一天! :-) 謝謝! – erict21