>我正在从mysql数据库中检索数据并使用它来生成excel文件。我不断得到一个损坏的xlsx文件,该文件受到日期语法的影响。如何从数据库中选择一个日期(类型)值并使用 PHPExcel 将其输入单元格?例如
$objPHPExcel -> getActiveSheet() -> SetCellValue('A' . $i, $result["name"]);
$objPHPExcel -> getActiveSheet() -> SetCellValue('B' . $i, $result["dateofcontract"]);
根据文档,您可以这样做:
/* PHPExcel_Cell_AdvanceValueBinder required for this sample */
require_once 'PHPExcel/Cell/AdvancedValueBinder.php';
// MySQL-like timestamp '2008-12-31' or date string
PHPExcel_Cell::setValueBinder(new PHPExcel_Cell_AdvancedValueBinder());
$objPHPExcel->getActiveSheet()
->setCellValue('B' . $i, $result['dateofcontract']));
$objPHPExcel->getActiveSheet()
->getStyle('B' . $i)
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDDSLASH)
PHPExcel 中有一些内置函数,用于将 unix 时间戳或 PHP DateTime 对象转换为 Excel 日期时间戳,这也会将一些字符串日期格式转换为 Excel 日期时间戳:
PHPExcel_Shared_Date::PHPToExcel()
然后,将生成的 Excel 日期时间戳值设置为单元格值,并将单元格数字格式样式设置为表示日期/时间格式的掩码。这正是 peterm 提到的高级值绑定器所做的,尽管高级值绑定器还操作您可能不希望更改的某些其他值(例如百分比)。
根据日期在数据库中的存储方式,将其检索为时间戳,然后使用 php 的 date()
函数。
例如。
"SELECT UNIX_TIMESTAMP(dateofcontract) AS dateofcontract"
$formattedDate = date("m.d.y",$dateofcontract) // outputs 03.10.01
显然,您需要将数据库查询结果分配给$dateofcontract
,要查看日期的所有可能格式,请参见此处:date()