如何使用Laravel Excel Maatwebsite将数据库多表导出到单个工作簿
实现方案(Laravel 8 + Laravel Excel 3.1 多工作表导出)
你现有代码中重复定义collection方法属于语法错误,PHP不支持同类同名方法重载,且单表导出的结构本身无法支撑多工作表需求。Laravel Excel 3.1提供了WithMultipleSheets接口专门处理多工作表导出场景,实现步骤如下:
步骤1:创建单个工作表对应的导出类
每个工作表单独定义独立的Export类,分别绑定对应数据源:
// app/Exports/FinancieroSheetExport.php namespace App\Exports; use App\Models\tablasexcel; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithTitle; // 可选:给工作表设置名称 class FinancieroSheetExport implements FromCollection, WithTitle { public function collection() { return collect(tablasexcel::getFinanciero()); } // 可选:定义工作表名称 public function title(): string { return '财务数据'; } }
// app/Exports/NegociosSheetExport.php namespace App\Exports; use App\Models\tablasexcel; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithTitle; class NegociosSheetExport implements FromCollection, WithTitle { public function collection() { return collect(tablasexcel::getNegocios()); } public function title(): string { return '业务数据'; } }
步骤2:创建多工作表总导出类
定义总导出类,实现WithMultipleSheets接口,在sheets方法中返回所有要导出的工作表实例:
// app/Exports/MultiSheetExport.php namespace App\Exports; use Maatwebsite\Excel\Concerns\WithMultipleSheets; class MultiSheetExport implements WithMultipleSheets { // 按顺序返回所有工作表实例 public function sheets(): array { return [ new FinancieroSheetExport(), new NegociosSheetExport(), // 需要更多工作表继续往数组里加对应实例即可 ]; } }
步骤3:控制器中调用导出
在业务逻辑中直接调用总导出类即可生成包含多个工作表的Excel文件:
// 控制器调用示例 use App\Exports\MultiSheetExport; use Maatwebsite\Excel\Facades\Excel; public function export() { return Excel::download(new MultiSheetExport, '全量数据.xlsx'); }
可选拓展
如果需要给每个工作表自定义表头、单元格样式、数据映射,可以给对应工作表的Export类引入WithHeadings、WithStyles等官方提供的Concern即可,逻辑和单表导出完全一致。
内容的提问来源于stack exchange,提问作者BG Dev
相关产品推荐
相关产品推荐

