2016-09-19 53 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