laravel-admin 导出多个sheet的excel,扩展使用的是
maatwebsite/excel": "^3.1"
//控制器中调用 $grid->exporter(new PeopleExporter()); //下面 是PeopleExporter 代码 namespace App\Admin\Extensions; use App\Models\People; use Encore\Admin\Facades\Admin; use Encore\Admin\Grid; use Encore\Admin\Grid\Exporters\ExcelExporter; use Maatwebsite\Excel\Concerns\Exportable; use Maatwebsite\Excel\Concerns\WithMultipleSheets; use App\Exports\Sheets\PeopleSheet; class PeopleExporter extends ExcelExporter implements WithMultipleSheets { protected $fileName ='1.xlsx'; use Exportable; public function __construct(Grid $grid = null) { $type = request('type',1); $name = People::$typeArr[$type]; $this->fileName = $name.'_'.date('Ymd').'.xlsx'; } public function sheets(): array { $type = request('type',1); $sheets = []; $export = request('_export_'); $where = []; $where['type'] = $type; $people = People::where($where); $peoples = $people->get(); if ($peoples){ foreach ($peoples as $peo){ $sheets[] = new PeopleSheet( $peo->id,$peo->name,$type,$success_at); } } return $sheets; } }
//下面是PeopleSheet的主要代码
namespace App\Exports\Sheets; use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithTitle; use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\WithMapping; class PeopleSheet implements FromQuery, WithTitle, WithHeadings, WithMapping { private $pid; private $name; private $type; private $success_at; public function __construct(int $pid,$name,$type=1,$success_at='') { $this->pid = $pid; $this->name = $name; $this->type = $type; $this->success_at = $success_at; } /** * @return Builder */ public function query() { return ReportForms::query() ->select('col1','col2','col3','col4','col5') ->where('pid',$this->pid); } /** * @return string */ public function title(): string { return $this->name; } public function headings(): array { return [ '日期', '职场名称', '姓名', '业务名称', '成功号码', ]; } /** * @var ReportForms $invoice */ public function map($invoice): array { return [ $invoice->col1, $this->getColName($invoice->col2,1), $this->getColName($invoice->col3,2), $invoice->col4, $invoice->col5, ]; } public function getColName($col,$num) { switch ($num){ case 1: $data = Service::find($col); return $data?$data->name:''; case 2: $data = Pingtai::find($col); return $data?$data->name:''; } } }