【问题标题】:Why PHPexcel insert single quote in date field?为什么 PHPexcel 在日期字段中插入单引号?
【发布时间】:2016-02-27 17:50:06
【问题描述】:

我正在尝试使用 PHPExcel 将日期插入单元格。这是我的代码:

    include('xlsx/Classes/PHPExcel.php');
    include('xlsx/Classes/PHPExcel/Calculation.php');
    include('xlsx/Classes/PHPExcel/Cell.php');
    $objPHPExcel = new PHPExcel();
    $start = 3;
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode('DD.MM.YYYY');
    $objPHPExcel->getActiveSheet()->SetCellValue('A1', date('d.m.Y', time()+60*($start + 3)));
    $objPHPExcel->getActiveSheet()->getStyle('A1')->getNumberFormat()->setFormatCode('DD.MM.YYYY');
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
    $objWriter->save('text.xls');

然而,PHPexcel 选择了正确的格式,但是它用单引号插入日期

'27.02.2016

改为

27.02.2016

如果没有这个报价,我不知道如何插入日期,希望你能帮助我。

【问题讨论】:

  • 尝试从/Examples读取02types.php

标签: php phpexcel


【解决方案1】:

setFormatCode 方法设置 Excel 用于输出日期的格式,而不是设置 PHPExcel 解释日期的格式。 Excel 电子表格以特定的时间戳格式存储日期,该格式可以使用PHPExcel_Shared_Date 类生成。它具有在各种日期格式和 Excel 预期格式之间进行转换的方法。

$objPHPExcel->getActiveSheet()->SetCellValue('A1',
    PHPExcel_Shared_Date::PHPToExcel(time()+60*($start + 3)));

...应该可以解决问题。

【讨论】:

    【解决方案2】:

    还有一个决定:

      $objPHPExcel->getActiveSheet()->SetCellValue('A1', '=NOW()+0.00001*60*'.$start);
    

    【讨论】:

    • 这可能无法满足您的期望:每次在 MS Excel 中打开电子表格时,都会重新计算 MS Excel NOW() 函数,因此明天打开文件,单元格 A1 中显示的值将是与您今天打开它显示的值不同....您在创建电子表格文件时已接受修复日期/时间的答案,因为您将该 Excel 时间戳存储在单元格 A1 中,而不是挥发性公式
    【解决方案3】:

    这在 2021 年的 PHPSpreadsheet 中是相同的,但以下解决方案将解决此问题:

    $phpSpreadsheet->getActiveSheet()->setCellValue('H'.$start,'=DATE('.date('Y,m,d',strtotime($yourtime)).')');

    您显然不必使用strtotime,但任何 Unix 日期戳或格式只要其Y,m,d Excel 日期将其作为输入格式 (https://exceljet.net/excel-functions/excel-date-function)

    此解决方案利用内置的 XLSX 日期函数,而不是依赖于 PhpSpreadsheet。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多