StudentsExport.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace App\Exports;
  3. use App\Models\Student;
  4. use Illuminate\Support\Facades\Log;
  5. use Maatwebsite\Excel\Concerns\FromCollection;
  6. use Maatwebsite\Excel\Concerns\WithHeadings;
  7. use Maatwebsite\Excel\Concerns\WithEvents;
  8. use Maatwebsite\Excel\Events\AfterSheet;
  9. class StudentsExport implements FromCollection, WithHeadings, WithEvents
  10. {
  11. public $columns = 7;
  12. public function collection()
  13. {
  14. $students = Student::orderBy('created_at', 'desc')->get();
  15. $items = collect();
  16. foreach($students as $item) {
  17. $tmp = $item->getCourseInfo();
  18. $item = collect([
  19. 'name' => $item->name,
  20. 'phone' => $item->phone,
  21. 'course_name' => $tmp['course_name'],
  22. 'apply_date' => $tmp['apply_date'],
  23. 'end_date' => $tmp['end_date'],
  24. 'teacher_names' => $tmp['teacher_names'],
  25. 'remark' => $item->remark,
  26. ]);
  27. $items->push($item);
  28. }
  29. return $items;
  30. }
  31. public function headings(): array
  32. {
  33. return [
  34. '姓名',
  35. '手机号',
  36. '课程名称',
  37. '报名日期',
  38. '截止日期',
  39. '任课老师',
  40. '备注',
  41. ];
  42. }
  43. public function registerEvents(): array
  44. {
  45. return [
  46. AfterSheet::class => function(AfterSheet $event) {
  47. $sheet = $event->sheet->getDelegate();
  48. for($i = 0; $i <= $this->columns; ++$i) {
  49. $sheet->getColumnDimensionByColumn($i)->setWidth(14);
  50. }
  51. $items = $sheet->getHighestRowAndColumn();
  52. $sheet->getStyle('A1:' . $items['column'] . $items['row'])->getAlignment()->setHorizontal('center');
  53. },
  54. ];
  55. }
  56. }