1, * 'value' => '标题' * ], * [ * 'index' => 2, * 'value' => '名称' * ] * ], * [ * [ * 'index' => 1, * 'value' => '标题2' * ], * [ * 'index' => 2, * 'value' => '名称2' * ] * ] * ]; * @param array $head * @return ExcelService */ public function setHead(array $head = []): ExcelService { $this->head = $head; return $this; } /** * 头部长度 * @var array */ private $head_length = 0; /** * 设置头部长度 * @param int $length * @return ExcelService */ public function setHeadLength(int $length = 0): ExcelService { $this->head_length = $length; return $this; } /** * 内容 * @var array */ private $content = []; /** * 设置内容 * [ * [ * [ * 'index' => 1, * 'value' => '标题' * ], * [ * 'index' => 2, * 'value' => '名称' * ] * ], * [ * [ * 'index' => 1, * 'value' => '标题2' * ], * [ * 'index' => 2, * 'value' => '名称2' * ] * ] * ]; * @param array $content * @return ExcelService */ public function setContent(array $content = []): ExcelService { $this->content = $content; return $this; } /** * 文件名 * @var string */ private $file_name = ''; /** * 设置文件名(不需要后缀名) * @param string $file_name * @return $this */ public function setFileName(string $file_name = ''): self { $this->file_name = $file_name; return $this; } /** * 生成表格文件 * @return string * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception * @throws Exception */ public function generate(): string { // 生成表格 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); if (empty($this->head)) { throw new Exception('头部内容未设置!'); } if (empty($this->head_length)) { throw new Exception('头部长度未设置!'); } if (empty($this->file_name)) { throw new Exception('文件保存路径未设置!'); } //设置工作表标题名称 //设置单元格内容 foreach ($this->head as $key => $value) { foreach ($value as $k => $v) { $sheet->setCellValueByColumnAndRow($v['index'], $key + 1, $v['value']); } } foreach ($this->content as $key => $value) { foreach ($value as $k => $v) { $sheet->setCellValueByColumnAndRow($v['index'], $key + $this->head_length, $v['value']); } } $writer = new Xlsx($spreadsheet); $writer->save("{$this->file_name}.xlsx"); return "{$this->file_name}.xlsx"; } }