2016-09-19 96 views
1

我已經創建了Excel電子表格。在第二列中,我有像0:11:23和2:03:33這樣的值,幾千行值。使用PHP我設置格式爲:PHPExcel字符串到時間

$sheet->getStyle($colRange)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4); 

但是,單元格仍然只是字符串。如果你從0:11:22編輯一個單元格到0:11:33之類的東西,那麼這個單元格將被轉換成一個時間。在頂部它從「0:11:22」到「0:11:33 AM」這個自動添加AM是什麼似乎是巨大的變化,然後我可以做我想要的文件。

如何將數千個單元格從「0:11:22」更改爲「0:11:22 AM」?

回答

0

那是因爲你要的日期/時間轉換爲MS Excel的系列化時間戳,並存儲在單元格中該值;如PHPExcel Documentation中所述,並在/Examples文件夾中顯示在02types.php中。

一旦你存儲在實際的MS Excel時間戳值,那麼你可以申請一個格式,它

$objPHPExcel->getActiveSheet()->setCellValue('A12', 'Date/Time') 
    ->setCellValue('B12', 'Time') 
     ->setCellValue('C12', PHPExcel_Shared_Date::PHPToExcel($dateTimeNow)); 
$objPHPExcel->getActiveSheet() 
    ->getStyle('C12') 
    ->getNumberFormat() 
    ->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4); 
+0

嗨,馬克,我切換到FORMAT_DATE_TIME8,您也正確,因爲它需要時間戳格式。這大約是他們想要的方式的90%。現在唯一的一點是,如果你稍微改變0:01:02,並且excel改變它說12:01:03 AM - 他們喜歡那樣。但是通過編程實現,它會在excel公式欄中顯示「09/20/2016 12:01:03 AM」,而不僅僅是他們想要的時間......我知道你回答了這個問題,但是你有沒有關於如何不顯示日期部分的任何想法,就像手動更改時間時發生的一樣? – Sparfy

+0

而且,我還通過刪除日期部分的Excel日期修復了我的「09/20/2016 12:01:03 AM」問題datetime:12345.6789 - > 0.6789 $ val = $ objPHPExcel-> getActiveSheet() - > getCell($細胞) - >的getValue(); $ timestamp = DateTime :: createFromFormat('H:i:s',$ val); $ excelTime = PHPExcel_Shared_Date :: PHPToExcel($ timestamp); $ excelTime = $ excelTime - (int)$ excelTime; $ objPHPExcel-> getActiveSheet() - > setCellValue($ cell,$ excelTime); – Sparfy

0

試試這個

$sheet 
    ->getStyle($colRange) 
    ->getNumberFormat() 
    ->setFormatCode('[$-C09]d mmm yyyy;@'); 
+0

喜丹尼,感謝您抽出寶貴的時間 - 我需要它的時候,沒有日期格式。我曾嘗試使用帶時間格式的代碼來正確格式化時間戳,但我的問題並未首先使用時間戳... – Sparfy