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(); } }
关键注意事项
- 移除导出类中原有的
WithHeadingstrait和headings()方法,避免与自定义表头逻辑冲突 mergeCells的参数可根据实际需求调整,比如需要跨3列就写B1:D1- 样式部分可自行扩展,比如添加背景色、边框等美化效果
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

