123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- namespace App\Exports;
- use Illuminate\Support\Collection;
- use Maatwebsite\Excel\Concerns\FromCollection;
- use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
- use Maatwebsite\Excel\Concerns\WithHeadings;
- use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
- use Maatwebsite\Excel\Concerns\WithEvents;
- use Maatwebsite\Excel\Events\AfterSheet;
- use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
- use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
- class TableHeadExport extends DefaultValueBinder implements
- WithCustomValueBinder,
- FromCollection,
- WithStrictNullComparison,
- WithHeadings,
- WithEvents
- {
- protected $data;
- protected $headers;
- protected $headerComments; // 表头批注:键=表头名,值=批注内容
- public function __construct($data, $headers = [], $headerComments = [])
- {
- $this->data = $data;
- $this->headers = $headers;
- $this->headerComments = $headerComments;
- }
- public function collection()
- {
- return new Collection($this->createData());
- }
- public function createData()
- {
- return $this->export();
- }
- public function headings(): array
- {
- return $this->headers;
- }
- private function export()
- {
- $list = [];
- foreach ($this->data as $v) {
- $list[] = $v;
- }
- return $list;
- }
- public function registerEvents(): array
- {
- return [
- AfterSheet::class => function(AfterSheet $event) {
- if (empty($this->headerComments)) {
- return; // 不传就不加批注
- }
- $sheet = $event->sheet->getDelegate();
- foreach ($this->headers as $index => $headerName) {
- if (!isset($this->headerComments[$headerName])) {
- continue; // 该表头没设置批注
- }
- $columnLetter = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($index + 1);
- $cell = $columnLetter . '1';
- $commentText = $this->headerComments[$headerName];
- // 创建批注
- $comment = $sheet->getComment($cell);
- $comment->getText()->createTextRun($commentText);
- $comment->setAuthor('系统提示');
- // 设置批注框大小(可调整数值)
- $comment->setWidth('200pt'); // 宽度
- $comment->setHeight('100pt'); // 高度
- }
- }
- ];
- }
- }
|