前面小节介绍了如何使用 phpspreadsheet
导入学生数据,本小节介绍如何使用 phpspreadsheet
导出学生数据。
在 Student
控制器中定义如下方法,表示从数据库读取数据:
$students = StudentModel::select();
代码块预览 复制
- 1
如下图所示:
//设置 excel 信息 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->getDefaultRowDimension()->setRowHeight(20);//设置默认行高 $sheet->getDefaultColumnDimension()->setWidth(10);//设置默认宽度 $sheet->getStyle("A1:Z1")->getFont()->setSize(10)->setBold(true);//设置第一行字体 $sheet->getStyle("A1:Z1")->getFont()->getColor()->setRGB("FFFFFF");//设置第一行字体颜色 $sheet->setCellValue('A1', 'ID'); $sheet->setCellValue('B1', '学生姓名'); $sheet->setCellValue('C1', '年龄'); $sheet->setCellValue('D1', '身份证号'); $n = 2; foreach ($students as $student) { $sheet->setCellValue('A' . $n, $student->id);//客户名称 $sheet->setCellValue('B' . $n, $student->name);//客户编号 $sheet->setCellValue('C' . $n, $student->age);// $sheet->setCellValue('D' . $n, $student->id_number); $n++; }
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
设置好文件名后,就可以下载导出 Excel
了:
$file = "学生信息".date('YmdHis').".xlsx"; $writer = new Xlsx($spreadsheet); header('Content-Disposition: attachment;filename='.$file);//告诉浏览器将输出文件的名称 header('Cache-Control: max-age=0');//禁止缓存 $writer->save("php://output");;
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
<?php namespace app\study\controller; use app\study\model\StudentModel; use cmf\controller\AdminBaseController; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use think\facade\Request; class StudentController extends AdminBaseController { public function add() { return $this->fetch(); } public function addPost() { try { $studentModel = new StudentModel(); $studentModel->name = $this->request->param('name', ""); $studentModel->age = $this->request->param('age', 0, 'intval'); $studentModel->id_number = $this->request->param('id_number', ""); $studentModel->created_at = time(); $studentModel->save(); } catch (\Exception $exception) { return $this->error($exception->getMessage()); } return $this->success('请求成功'); } public function upload() { return $this->fetch(); } public function uploadExcel() { $data = $this->request->param(); $file_url = "./upload/" . $data['file_url']; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($file_url); $n = 2; while (true) { $name = $spreadsheet->getActiveSheet()->getCell('A' . $n)->getValue(); $age = $spreadsheet->getActiveSheet()->getCell('B' . $n)->getValue(); $id_number = $spreadsheet->getActiveSheet()->getCell('C' . $n)->getValue(); try { $studentModel = new StudentModel(); $studentModel->name = $name; $studentModel->age = $age; $studentModel->id_number = $id_number; $studentModel->created_at = time(); $studentModel->save(); } catch (\Exception $exception) { } if (empty($name) && empty($age) && empty($id_number)) { break; } $n++; } return $this->success('导入成功'); } public function down() { //读取数据 $students = StudentModel::select(); //设置 excel 信息 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->getDefaultRowDimension()->setRowHeight(20);//设置默认行高 $sheet->getDefaultColumnDimension()->setWidth(10);//设置默认宽度 $sheet->getStyle("A1:Z1")->getFont()->setSize(10)->setBold(true);//设置第一行字体 $sheet->getStyle("A1:Z1")->getFont()->getColor()->setRGB("FFFFFF");//设置第一行字体颜色 $sheet->setCellValue('A1', 'ID'); $sheet->setCellValue('B1', '学生姓名'); $sheet->setCellValue('C1', '年龄'); $sheet->setCellValue('D1', '身份证号'); $n = 2; foreach ($students as $student) { $sheet->setCellValue('A' . $n, $student->id);//客户名称 $sheet->setCellValue('B' . $n, $student->name);//客户编号 $sheet->setCellValue('C' . $n, $student->age);// $sheet->setCellValue('D' . $n, $student->id_number); $n++; } $file = "学生信息" . date('YmdHis') . ".xlsx"; $writer = new Xlsx($spreadsheet); header('Content-Disposition: attachment;filename=' . $file);//告诉浏览器将输出文件的名称 header('Cache-Control: max-age=0');//禁止缓存 $writer->save("php://output");; } }
代码块预览 复制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99