时间单元格在.xlsx输出上失败

时间:2014-10-02 08:20:09

标签: phpexcel

我有一部分代码可以生成任务的持续时间,以便为我的报告格式化h:mm(5:00)。

$duration=explode(':',task_duration($item_task->duration_plan));
$time_str='=TIME('.$duration[0].';'.$duration[1].';0)';
$excel->getActiveSheet()->setCellValue('D' . $row, $time_str);
$excel->getActiveSheet()->getStyle('D' . $row)-`enter code here`>getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3);

所以我得到类似=TIME(5:0:0)的东西,它应该像文件一样显示在5:00。

所有内容都适用于.xls,但当我尝试在.xlsx中创建文件时,时间单元格中没有任何内容,只有0

然后我试着解决这个问题:

PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
$excel->getActiveSheet()->setCellValue('D' . $row , task_duration($item_task->duration_plan) . ':00');
$excel->getActiveSheet()->getStyle('D' . $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME3);

它同时适用于.xls和.xlxs,但是当小时数大于24时,时间单元格不会显示为时间(25:00:00),而是显示为字符串(' 25: 00:00)我无法获得所有任务的总时间。

我所有其他非时间格式的单元格看起来都很好。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

感谢您的帮助 我把秒数除以86400就可以了。

$activeSheetObj->setCellValueExplicit(
    PHPExcel_Cell::stringFromColumnIndex($columnIndex).$line,
    $seconds/86400, PHPExcel_Cell_DataType::TYPE_NUMERIC);

$activeSheetObj->getStyle(PHPExcel_Cell::stringFromColumnIndex($columnIndex++).$line)
  ->getNumberFormat()->setFormatCode('[HH]:MM:SS');

答案 1 :(得分:0)

引用PHPExcel开发人员文档,第4.6.4节(Write a formula into a cell):

  

在Excel文件中,公式始终存储在英文版Microsoft Office Excel中,并且PHPExcel以此格式在内部处理所有公式。这意味着以下规则成立:

     
      
  • 小数分隔符是'。' (周期)
  •   
  • 函数参数分隔符是',' (逗号)
  •   
  • 矩阵行分隔符是&#39 ;;' (分号)
  •   
  • 必须使用英文函数名称
  •   

您使用分号(;)作为TIME()函数的参数分隔符

答案 2 :(得分:0)

回答关于显示时间值的第二个问题> 24:00

FORMAT_DATE_TIME3是时间格式代码h:mm,根据24小时制显示时间,超过24小时的值将翻转到第二天,因此16:00 + 16:00将给出1天08:00而不是32:00作为时间;但是h:mm会抑制天数,而你却看不到小于24小时的小时值

如果您希望小时值超过24(例如,如果要一起添加多次以计算总持续时间),则需要使用适当的数字格式掩码,如[hh]:mm。此格式显示32:00作为16:00 + 16:00的值。

答案 3 :(得分:0)

我还希望以您希望完成的格式将小时数存储到单元格中。我了解到你需要以十进制天数[1]存储时间,然后应用自定义格式。很像:

$excel->getActiveSheet()->setCellValue('D' . $row, $days + ($hours / 24) + ($minutes / (24 * 60)));
$excel->getActiveSheet()->getStyle('D' . $row)->getNumberFormat()->setFormatCode('[hh]:mm:ss');`

这似乎在OpenOffice和Apple的Numbers中都能正常打开。在格式代码中使用大写字母无法在Numbers中正确打开。

[1] dd/mm/yyyy format in PHPExcel adding single quote(') in cell