| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- <?php
- namespace App\Exports;
- use Maatwebsite\Excel\Concerns\WithEvents;
- use Maatwebsite\Excel\Concerns\WithTitle;
- use Maatwebsite\Excel\Events\AfterSheet;
- use PhpOffice\PhpSpreadsheet\Style\Alignment;
- use PhpOffice\PhpSpreadsheet\Style\Border;
- use PhpOffice\PhpSpreadsheet\Style\Color;
- class ProjectStaffExport implements WithEvents, WithTitle
- {
- protected $data;
- public function __construct(array $data)
- {
- $this->data = $data;
- }
- public function title(): string
- {
- return '项目研发人员情况';
- }
- public function registerEvents(): array
- {
- return [
- AfterSheet::class => function (AfterSheet $event) {
- $sheet = $event->sheet->getDelegate();
- $lastCol = 'I';
- $dataCount = count($this->data);
- $lastRow = 2 + $dataCount;
- // --- 1. 第一行:主标题(包含红色提示文字) ---
- $sheet->mergeCells('A1:I1');
- $sheet->setCellValue('A1', "项目研发活动人员情况表");
- $sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
- // --- 2. 第二行:表头设置 ---
- $headers = [
- 'A' => '序号',
- 'B' => '姓名',
- 'C' => '学历',
- 'D' => '专业',
- 'E' => '职称',
- 'F' => "项目", // 提示列
- 'G' => '项目角色',
- 'H' => '部门',
- 'I' => '承担职责'
- ];
- foreach ($headers as $col => $title) {
- $sheet->setCellValue("{$col}2", $title);
- }
- // 设置表头中 F2 单元格“项目角色”下方文字为红色
- $sheet->getStyle('F2')->getFont()->getColor()->setARGB(Color::COLOR_RED);
- $sheet->getStyle('A2:I2')->getFont()->setBold(true);
- // --- 3. 填充数据 ---
- $currentRow = 3;
- foreach ($this->data as $index => $row) {
- $sheet->fromArray([
- $index + 1,
- $row['title'] ?? '',
- $row['education'] ?? '',
- $row['major'] ?? '',
- $row['p_title'] ?? '',
- $row['item_title'] ?? '',
- $row['item_role'] ?? '',
- $row['depart_title'] ?? '',
- $row['duty'] ?? '',
- ], null, "A{$currentRow}");
- $currentRow++;
- }
- // --- 4. 全局样式 ---
- $fullRange = "A1:{$lastCol}{$lastRow}";
- $sheet->getStyle($fullRange)->getAlignment()->applyFromArray([
- 'vertical' => Alignment::VERTICAL_CENTER,
- 'horizontal' => Alignment::HORIZONTAL_CENTER,
- 'wrapText' => true,
- ]);
- // --- 5. 行高与列宽 ---
- $sheet->getRowDimension(1)->setRowHeight(35);
- $sheet->getRowDimension(2)->setRowHeight(45); // 表头双行文字
- $sheet->getColumnDimension('A')->setWidth(8);
- $sheet->getColumnDimension('B')->setWidth(12);
- $sheet->getColumnDimension('F')->setWidth(20); // 角色定义列
- $sheet->getColumnDimension('G')->setWidth(15);
- $sheet->getColumnDimension('H')->setWidth(15);
- $sheet->getColumnDimension('I')->setWidth(25); // 职责列
- // --- 6. 边框 ---
- $sheet->getStyle("A2:{$lastCol}{$lastRow}")->getBorders()->getAllBorders()->setBorderStyle(Border::BORDER_THIN);
- },
- ];
- }
- }
|