繁体   English   中英

PHPExcel:如何设置单元格的日期格式

[英]PHPExcel: how to set date format for a cell

我需要将日期保存到Excel文件,它必须以“dd / mm / yyyy”(或用户的本地日期格式)格式输出,并被视为日期,以便可以正确排序它们的列。

这是代码:

<?php
include_once("../PHPExcel/Classes/PHPExcel.php");
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

$objPHPExcel = new PHPExcel();
$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

//I didn't find dd/mm/yyyy format, so I used yyyy-mm-dd
$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
$sheet->getStyleByColumnAndRow(0, 1)
    ->getNumberFormat()->setFormatCode(
        PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2
);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx");

它创建了一个文件,但我没有看到我的本地日期格式:“2014-10-16”,单元格格式为“所有格式” - >“yyyy-mm-dd”。 我希望它以我的本地日期格式进行解析和输出。

我查看了PHPExcel/Classes/PHPExcel/Style/NumberFormat.php的源代码,发现了许多日期格式:

const FORMAT_DATE_YYYYMMDD2 = 'yyyy-mm-dd';
const FORMAT_DATE_YYYYMMDD = 'yy-mm-dd';
const FORMAT_DATE_DDMMYYYY = 'dd/mm/yy';
const FORMAT_DATE_DMYSLASH = 'd/m/y';
const FORMAT_DATE_DMYMINUS = 'd-m-y';
...

但我不知道该用什么。 我怎样才能达到预期目标?

$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");

在单元格中设置字符串值,而不是日期。 仅仅因为您将其解释为日期,并不意味着计算机程序会自动将其解释为日期。

查看PHPExcel 文档示例中的日期示例,您将看到需要将单元格值设置为MS Excel序列化时间戳(自1900年1月1日以来的天数的浮点值)。 您可以使用PHPExcel函数(如PHPExcel_Shared_Date::PHPToExcel()将人类日期/ PHP DateTime对象/ Unix时间戳转换为MS Excel序列化时间戳。

$sheet->setCellValueByColumnAndRow(0, 1, PHPExcel_Shared_Date::PHPToExcel( '2014-10-16' ));

将值存储为时间戳后,可以将所需的任何日期格式掩码应用于该单元格以获得所需的格式

此代码以日期格式生成4个单元格。

<?php
include_once("../PHPExcel/Classes/PHPExcel.php");
date_default_timezone_set('Europe/London');
$objPHPExcel = new PHPExcel();
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
PHPExcel_Settings::setCacheStorageMethod($cacheMethod);

$objPHPExcel = new PHPExcel();
$sheet = $objPHPExcel->getActiveSheet();
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);

$format = 'dd/mm/yyyy';
for ($i = 1; $i < 5; ++$i)
{
    $date = new DateTime('2016-12-0'.$i);
    $sheet->setCellValueByColumnAndRow(0, $i, 
                                       PHPExcel_Shared_Date::PHPToExcel( $date ));

    $sheet->getStyleByColumnAndRow(0, $i)
        ->getNumberFormat()->setFormatCode($format);
}

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save("test.xlsx");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM