CommonExport.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Exports;
  3. use Illuminate\Support\Collection;
  4. use Illuminate\Support\Facades\Redis;
  5. use Maatwebsite\Excel\Concerns\FromCollection;
  6. use Maatwebsite\Excel\Concerns\WithEvents; // 自动注册事件监听器
  7. use Maatwebsite\Excel\Concerns\WithStrictNullComparison; // 导出 0 原样显示,不为 null
  8. use Maatwebsite\Excel\Events\AfterSheet;
  9. class CommonExport implements FromCollection, WithEvents, WithStrictNullComparison
  10. {
  11. public $data;
  12. /**
  13. * @return \Illuminate\Support\Collection
  14. */
  15. public function __construct($data)
  16. {
  17. $this->data = $data;
  18. }
  19. /**
  20. * 导出数据的处理
  21. * @return array
  22. */
  23. public function registerEvents(): array
  24. {
  25. //这边处理数据格式
  26. //关于表单的合并
  27. $params = $this->data['params'];
  28. $style = [
  29. AfterSheet::class => function (AfterSheet $event) use($params) {
  30. $count = count($this->data);
  31. //设置区域单元格水平居中
  32. $event->sheet->getDelegate()->getStyle('A1:'.'BZ'.($count+1))->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
  33. //合并相关
  34. $merge = $params['merge'];
  35. $event->sheet->getDelegate()->setMergeCells($merge);
  36. },
  37. ];
  38. return $style;
  39. }
  40. //数组转集合
  41. public function collection()
  42. {
  43. return new Collection($this->createData());
  44. }
  45. //业务代码
  46. public function createData()
  47. {
  48. $data = $this->export();
  49. return $data;
  50. }
  51. private function export(){
  52. // var_dump($this->data);die;
  53. $data = $this->data['data'];
  54. $list = [];
  55. foreach ($data as $v){
  56. $list[] = $v;
  57. }
  58. return $list;
  59. }
  60. }