data = $data; $this->headings = $headings; $this->sheetName = $sheetName; $this->createData(); } public function headings(): array { return $this->headings; } //数组转集合 public function collection() { return new Collection($this->data); } //业务代码 public function createData() { $this->data = collect($this->data)->toArray(); } public function registerEvents(): array { return [ AfterSheet::class => function (AfterSheet $event) { //设置区域单元格垂直居中 $event->sheet->getDelegate()->getStyle('A1:Z1265')->getAlignment()->setVertical('center'); //设置区域单元格水平居中 $event->sheet->getDelegate()->getStyle('A1:Z1265')->getAlignment()->setHorizontal('center'); //设置列宽 foreach ($this->columnWidth as $column => $width) { $event->sheet->getDelegate() ->getColumnDimension($column) ->setWidth($width); } //设置行高,$i为数据行数 foreach ($this->rowHeight as $row => $height) { $event->sheet->getDelegate() ->getRowDimension($row) ->setRowHeight($height); } //设置区域单元格垂直居中 foreach ($this->vertical as $region => $position) { $event->sheet->getDelegate() ->getStyle($region) ->getAlignment() ->setVertical($position); } //设置区域单元格字体 foreach ($this->font as $region => $value) { $event->sheet->getDelegate() ->getStyle($region) ->getFont()->setName($value); } //设置区域单元格字体大小 foreach ($this->fontSize as $region => $value) { $event->sheet->getDelegate() ->getStyle($region) ->getFont() ->setSize($value); } //设置区域单元格字体粗体 foreach ($this->bold as $region => $bool) { $event->sheet->getDelegate() ->getStyle($region) ->getFont() ->setBold($bool); } //设置区域单元格背景颜色 foreach ($this->background as $region => $item) { $event->sheet->getDelegate()->getStyle($region)->applyFromArray([ 'fill' => [ 'fillType' => 'linear', //线性填充,类似渐变 'startColor' => [ 'rgb' => $item //初始颜色 ], //结束颜色,如果需要单一背景色,请和初始颜色保持一致 'endColor' => [ 'argb' => $item ] ] ]); } //设置边框颜色 foreach ($this->borders as $region => $item) { $event->sheet->getDelegate()->getStyle($region)->applyFromArray([ 'borders' => [ 'allBorders' => [ 'borderStyle' => Border::BORDER_THIN, 'color' => ['argb' => $item], ], ], ]); } //合并单元格 $event->sheet->getDelegate()->setMergeCells($this->mergeCells); if (!empty($this->sheetName)) { $event->sheet->getDelegate()->setTitle($this->sheetName); } } ]; } /** * @return array * [ * 'B' => 40, * 'C' => 60 * ] */ public function setColumnWidth(array $columnwidth) { $this->columnWidth = array_change_key_case($columnwidth, CASE_UPPER); } /** * @return array * [ * 1 => 40, * 2 => 60 * ] */ public function setRowHeight(array $rowHeight) { $this->rowHeight = $rowHeight; } /** * @return array * [ * A1:K7 => '宋体' * ] */ public function setFont(array $font) { $this->font = array_change_key_case($font, CASE_UPPER); } /** * @return array * @2020/3/22 10:33 * [ * A1:K7 => true * ] */ public function setBold(array $bold) { $this->bold = array_change_key_case($bold, CASE_UPPER); } /** * @return array * @2020/3/22 10:33 * [ * A1:K7 => F0FF0F * ] */ public function setBackground(array $background) { $this->background = array_change_key_case($background, CASE_UPPER); } /** * @return array * [ * A1:K7 * ] */ public function setMergeCells(array $mergeCells) { $this->mergeCells = array_change_key_case($mergeCells, CASE_UPPER); } /** * @return array * [ * A1:K7 => 14 * ] */ public function setFontSize(array $fontSize) { $this->fontSize = array_change_key_case($fontSize, CASE_UPPER); } /** * @return array * [ * A1:K7 => #000000 * ] */ public function setBorders(array $borders) { $this->borders = array_change_key_case($borders, CASE_UPPER); } }