data = $data; $this->sheetName = $sheetName; } /** * 数据集合 */ public function collection() { return new Collection($this->data); } /** * Sheet 名称 */ public function title(): string { return $this->sheetName; } /** * 自定义单元格绑定(防止数字丢失前导零 / 科学计数法) */ public function bindValue(Cell $cell, $value) { // 如果是纯数字,则以字符串形式写入 if (is_numeric($value)) { $cell->setValueExplicit($value, DataType::TYPE_STRING); return true; } return parent::bindValue($cell, $value); } /** * 每页 Sheet 的样式 */ public function styles(Worksheet $sheet) { $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); // 1. 表头加粗、居中 $sheet->getStyle('A1:' . $highestColumn . '1')->applyFromArray([ 'font' => [ 'bold' => true, 'size' => 11, ], 'alignment' => [ 'horizontal' => Alignment::HORIZONTAL_CENTER, 'vertical' => Alignment::VERTICAL_CENTER, ], 'borders' => [ 'bottom' => ['borderStyle' => Border::BORDER_THIN], ], ]); // 2. 内容垂直居中 $sheet->getStyle('A2:' . $highestColumn . $highestRow) ->getAlignment() ->setVertical(Alignment::VERTICAL_CENTER); // 3. 自动列宽 foreach (range('A', $highestColumn) as $col) { $sheet->getColumnDimension($col)->setAutoSize(true); } return []; } }