spreadsheet = new BaseSpreadsheet(); $this->spreadsheet->getProperties() ->setTitle($title) ->setSubject($title) ->setDescription($title); $this->spreadsheet->getActiveSheet()->setTitle('unfilled'); } public function headers(array $headers): self { $this->headers = $headers; return $this; } public function generate() { $this->spreadsheet->setActiveSheetIndex(0); $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($this->spreadsheet); $writer->save('/home/pille/s.xlsx'); $this->spreadsheet->disconnectWorksheets(); unset($this->spreadsheet); } public function sheet(string $name, array $data): self { if ('unfilled' === $this->spreadsheet->getActiveSheet()->getTitle()) { $this->spreadsheet->getActiveSheet()->setTitle($name); return $this->fill($data); } $this->spreadsheet->addSheet(new Worksheet($this->spreadsheet, $name)); $this->spreadsheet->setActiveSheetIndexByName($name); return $this->fill($data); } private function fill(array $data): self { $headers = collect($this->headers)->map(fn ($header) => $header->name)->toArray(); $this->spreadsheet->getActiveSheet()->fromArray($headers, null, 'A1'); $this->spreadsheet->getActiveSheet()->fromArray($data, null, 'A2'); return $this; } }