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

Laravel-Excel如何实现两行表头及跨列表头效果?

Laravel-Excel 实现两行表头及跨列效果

完全可以实现两行表头和跨列效果,不需要依赖默认的headings()方法,直接通过自定义工作表事件操作单元格即可,具体实现方式如下:

核心实现步骤

  • 让导出类实现WithEvents接口,通过BeforeSheet事件渲染自定义表头
  • 使用mergeCells方法实现表头跨列,setCellValue设置各单元格的表头内容

完整代码示例

use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\BeforeSheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;

class CustomHeaderExport implements WithEvents
{
    public function registerEvents(): array
    {
        return [
            BeforeSheet::class => function(BeforeSheet $event) {
                $sheet = $event->sheet;

                // 第一行跨列表头:合并B1到C1单元格
                $sheet->mergeCells('B1:C1');
                $sheet->setCellValue('A1', '');
                $sheet->setCellValue('B1', 'Header 2 - Multiple Columns');
                $sheet->setCellValue('D1', '');

                // 第二行普通表头
                $sheet->setCellValue('A2', 'Header 1');
                $sheet->setCellValue('B2', 'Header 2-Sub1');
                $sheet->setCellValue('C2', 'Header 2-Sub2');
                $sheet->setCellValue('D2', 'Header 3');

                // 给表头添加样式(可选)
                $headerStyle = [
                    'font' => ['bold' => true],
                    'alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER]
                ];
                $sheet->getStyle('A1:D2')->applyFromArray($headerStyle);
            },
        ];
    }

    // 数据导出逻辑(根据业务需求调整)
    public function collection()
    {
        return YourDataModel::select('col1', 'col2', 'col3', 'col4')->get();
    }
}

关键注意事项

  • 移除导出类中原有的WithHeadings trait和headings()方法,避免与自定义表头逻辑冲突
  • mergeCells的参数可根据实际需求调整,比如需要跨3列就写B1:D1
  • 样式部分可自行扩展,比如添加背景色、边框等美化效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:23:23