Laravel Excel导出可求和时间格式单元格问题求助
Laravel Excel 设置可求和时间格式解决方案
你的代码核心问题是调用了getNumberFormat()但没有执行设置操作,这个方法仅用于获取格式对象,需要搭配setFormatCode()完成格式赋值。另外要确保导出的时间数据本身是Excel可识别的时间类型(而非字符串),否则即使设置格式也无法实现求和。
修正后的代码
use Maatwebsite\Excel\Events\AfterSheet; use PhpOffice\PhpSpreadsheet\Style\NumberFormat; public function registerEvents(): array { return [ AfterSheet::class => function (AfterSheet $event) { $event->sheet->getDelegate() ->getStyle('H4:H1000') ->getNumberFormat() // FORMAT_DATE_TIME3对应Excel内置的"h:mm AM/PM"格式 ->setFormatCode(NumberFormat::FORMAT_DATE_TIME3); }, ]; }
关键注意事项
- 确保数据类型正确:如果你的时间数据是字符串(比如
"12:30:00"),需要先转换成Excel可识别的时间数值或Carbon实例,可在导出类的map方法中处理:use Carbon\Carbon; use PhpOffice\PhpSpreadsheet\Shared\Date; public function map($row): array { return [ // 其他列数据... // 方式1:转换为Carbon实例 $row->time_column => Carbon::createFromFormat('H:i:s', $row->time_column), // 方式2:直接转为Excel兼容的时间数值 $row->time_column => Date::stringToTime($row->time_column) ]; } - 支持跨24小时求和:如果需要统计累计时长(比如超过24小时的时间),可以使用Excel自定义格式代码
[h]:mm:ss,替换上述代码中的常量即可:->setFormatCode('[h]:mm:ss');
内容的提问来源于stack exchange,提问作者Toni Rhubanaga
相关产品推荐
相关产品推荐

