You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PhpSpreadsheet 2.2版本原负时间值配置失效,寻求替代解决方案

解决方案:PhpSpreadsheet 2.x 支持负时间值

1. 调整工作簿日历设置(替代原全局设置)

在PhpSpreadsheet 2.x版本中,全局设置日历的方式已调整,需针对工作簿对象单独配置1904日历:

use \PhpOffice\PhpSpreadsheet\Shared\Date as Shared_Date;

// 创建工作簿实例后设置日历
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet->getWorkbook()->setCalendar(Shared_Date::CALENDAR_MAC_1904);

2. 配置单元格自定义格式

仅设置日历无法完全解决Excel的显示问题,需给包含负时间的单元格设置支持负时间的格式,避免出现############:

// 获取目标单元格
$cell = $spreadsheet->getActiveSheet()->getCell('A1');
// 设置兼容正负时间的自定义格式
$cell->getStyle()->getNumberFormat()->setFormatCode('[h]:mm:ss');
// 写入负时间数值(示例:-1小时30分钟,对应数值为-0.0625)
$cell->setValue(-0.0625);

注:[h]:mm:ss是Excel兼容负时间的标准格式之一,允许小时数超过24且支持负数值显示。

3. 额外注意事项

  • 避免使用Date::PHPToExcel等转换函数写入负时间,这类函数会过滤负数值,需直接写入原始时间数值
  • 此方案可在Excel中正常显示负时间,无需依赖Open/LibreOffice的非标准特性

内容的提问来源于stack exchange,提问作者Michele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:02:38