phpexcel - 自定义 PHPExcel 单元格格式仅在双击后显示

标签 phpexcel export-to-excel

我在使用 PHPExcel 设置自定义日期格式时遇到了一个奇怪的问题:我正在将一个 sql 格式的日期写入一个单元格,并使用 setFormatCode 将其格式设置为“d/m/y”。当我在 Excel 2007 中打开它时,它会显示原始日期格式,直到我双击单元格,然后它会更新为我想要的格式。
有没有办法让它在没有我帮助的情况下自我刷新?

$sheet->setCellValueByColumnAndRow($column, $row, '2010-07-16');
$sheet->getStyleByColumnAndRow($column, $row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DMYSLASH);

最佳答案

除非您使用 PHPExcel 的“高级值绑定(bind)器”,否则 $sheet->setCellValueByColumnAndRow($column, $row, '2010-07-16');会将值存储为字符串,而不是日期,因此您在下一行中设置的日期格式在应用于字符串时毫无意义,直到您在 Excel 中读取结果文件并强制刷新... Excel 本身然后修复你的错误。
为确保首先正确存储该值,您需要将其存储为日期/时间戳/数字而不是字符串,然后设置格式掩码以确保将其视为日期/时间戳而不是数字值(value)。
使用 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); 
或使用内置方法将日期格式的字符串直接转换为 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); 
或使用计算引擎函数库的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); 
或者,选项 4,是使用 PHPExcel 的“高级值绑定(bind)器”
要启用此功能,请执行以下静态调用
PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
在您实例化您的工作簿对象之前,或从文件中加载它
然后 PHPExcel 将识别您的值是日期,并处理转换为 Excel 日期/时间戳并自动格式化
$dateString = '2010-07-16';
$sheet->setCellValueByColumnAndRow($column, $row, $dateString); 

关于phpexcel - 自定义 PHPExcel 单元格格式仅在双击后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267545/

相关文章:

c# - 导出文档后响应关闭

python - 如何将时间戳转换为df以excel python?

c# - 将 ListView 导出为 Excel 格式

c# - 使用 EPPlus 的单元测试类

使用ajax调用PHPExcel下载

php - 如何在库中加载 PHPExcel?

phpexcel适合选择

angularjs - 字段名称 "action"导致 alasql 导出到 Excel 出现问题

php - 将两个或多个 xls 文件合并为工作表 PHPExcel

PHPExcel为每个结果添加多个工作表 PHP mysql