ISB*_*SBL 6 export-to-excel phpexcel
我在使用PHPExcel设置自定义日期格式时遇到了一个奇怪的问题:我正在向一个单元格写一个sql格式的日期,并将其格式设置为setFormatCode为'd/m/y'.当我在Excel 2007中打开它时,它会显示orignial日期格式,直到我双击单元格然后它更新为我想要的格式.有没有办法在没有我帮助的情况下让它自我清新?
$sheet->setCellValueByColumnAndRow($column, $row, '2010-07-16');
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
Run Code Online (Sandbox Code Playgroud)
Mar*_*ker 15
除非您使用的是PHPExcel的"Advanced Value Binder",否则$ sheet-> setCellValueByColumnAndRow($ column,$ row,'2010-07-16'); 将值存储为字符串而不是日期,因此在应用于字符串时,您在下一行中设置的日期格式无意义,直到您在Excel中读取结果文件并强制刷新... Excel本身然后修复你的错误.
要确保值首先正确存储,您需要将其存储为日期/时间戳/数字而不是字符串,然后设置格式掩码以确保将其视为日期/时间戳而不是数字值.
使用strtotime()将您的字符串转换为PHP日期,然后使用PHPExcel的内置日期转换方法:
$PHPDateValue = strtotime('2010-07-16');
$ExcelDateValue = PHPExcel_Shared_Date::PHPToExcel($PHPDateValue);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
Run Code Online (Sandbox Code Playgroud)
或使用内置方法直接将日期格式的字符串转换为Excel日期时间值
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Shared_Date::stringToExcel($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
Run Code Online (Sandbox Code Playgroud)
或使用计算引擎函数库的DATEVALUE()函数:
$dateString = '2010-07-16';
$ExcelDateValue = PHPExcel_Calculation_Functions::DATEVALUE($dateString);
$sheet->setCellValueByColumnAndRow($column, $row, $ExcelDateValue);
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);
Run Code Online (Sandbox Code Playgroud)
或者,选项4,是使用PHPExcel的"高级价值活页夹"
要启用此功能,请执行以下静态调用
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
Run Code Online (Sandbox Code Playgroud)
在实例化工作簿对象或从文件加载它之前
然后PHPExcel将识别您的值是一个日期,并处理转换为Excel日期/时间戳并自动格式化
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13160 次 |
| 最近记录: |