|
@@ -10,6 +10,13 @@ use think\exception\ValidateException;
|
|
use app\admin\model\teacher\ExamsScore;
|
|
use app\admin\model\teacher\ExamsScore;
|
|
use app\admin\model\Fault;
|
|
use app\admin\model\Fault;
|
|
use app\admin\model\Report;
|
|
use app\admin\model\Report;
|
|
|
|
+
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\IOFactory;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Reader\Csv;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Reader\Xls;
|
|
|
|
+use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
|
|
/**
|
|
/**
|
|
* sim-考试表/成绩总分
|
|
* sim-考试表/成绩总分
|
|
*
|
|
*
|
|
@@ -24,6 +31,7 @@ class Exams extends Backend
|
|
*/
|
|
*/
|
|
protected $model = null;
|
|
protected $model = null;
|
|
protected $whereExtend = null;
|
|
protected $whereExtend = null;
|
|
|
|
+ protected $noNeedRight = ['export'];
|
|
public function _initialize()
|
|
public function _initialize()
|
|
{
|
|
{
|
|
parent::_initialize();
|
|
parent::_initialize();
|
|
@@ -452,4 +460,139 @@ class Exams extends Backend
|
|
}
|
|
}
|
|
$this->success();
|
|
$this->success();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public function export()
|
|
|
|
+ {
|
|
|
|
+ set_time_limit(0);
|
|
|
|
+ ini_set('memory_limit', '2560M');
|
|
|
|
+
|
|
|
|
+ //如果发送的来源是 Selectpage,则转发到 Selectpage
|
|
|
|
+ if ($this->request->request('keyField')) {
|
|
|
|
+ return $this->selectpage();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $filter = $this->request->get("filter", '');
|
|
|
|
+ $filter = (array)json_decode($filter, true);
|
|
|
|
+ $op = $this->request->get("op", '');
|
|
|
|
+ $op = (array)json_decode($op, true);
|
|
|
|
+
|
|
|
|
+ [$where, $sort, $order, $offset, $limit] = $this->buildparams();
|
|
|
|
+ $list = $this->model
|
|
|
|
+ ->where($where)->where($this->whereExtend)
|
|
|
|
+ ->order($sort, $order)
|
|
|
|
+ ->paginate($limit);
|
|
|
|
+
|
|
|
|
+ $xlsName = '学员成绩信息';
|
|
|
|
+ $this->exportExcel($xlsName,'Excel2007', $list);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 输出到浏览器(需要设置header头)
|
|
|
|
+ * @param string $fileName 文件名
|
|
|
|
+ * @param string $fileType 文件类型
|
|
|
|
+ */
|
|
|
|
+ function exportExcel($fileName, $fileType,$data)
|
|
|
|
+ {
|
|
|
|
+ //文件名称校验
|
|
|
|
+ if (!$fileName) {
|
|
|
|
+ trigger_error('文件名不能为空', E_USER_ERROR);
|
|
|
|
+ }
|
|
|
|
+ //Excel文件类型校验
|
|
|
|
+ $type = ['Excel2007', 'Xlsx', 'Excel5', 'xls'];
|
|
|
|
+ if (!in_array($fileType, $type)) {
|
|
|
|
+ trigger_error('未知文件类型', E_USER_ERROR);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $ext = '';
|
|
|
|
+
|
|
|
|
+ if ($fileType == 'Excel2007' || $fileType == 'Xlsx') {
|
|
|
|
+ header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
|
|
|
|
+ header('Content-Disposition: attachment;filename="' . $fileName . '.xlsx"');
|
|
|
|
+ header('Cache-Control: max-age=0');
|
|
|
|
+ $ext = 'Xlsx';
|
|
|
|
+ } else { //Excel5
|
|
|
|
+ header('Content-Type: application/vnd.ms-excel');
|
|
|
|
+ header('Content-Disposition: attachment;filename="' . $fileName . '.xls"');
|
|
|
|
+ header('Cache-Control: max-age=0');
|
|
|
|
+ $ext = 'Xls';
|
|
|
|
+ }
|
|
|
|
+ $spreadsheet = new Spreadsheet();
|
|
|
|
+ $worksheet = $spreadsheet->getActiveSheet();
|
|
|
|
+ $worksheet->getColumnDimension('A')->setWidth(15);
|
|
|
|
+ $worksheet->getColumnDimension('B')->setWidth(15);
|
|
|
|
+ $worksheet->getColumnDimension('C')->setWidth(15);
|
|
|
|
+ $worksheet->getColumnDimension('D')->setWidth(15);
|
|
|
|
+
|
|
|
|
+ $worksheet->getRowDimension('1')->setRowHeight(25);
|
|
|
|
+
|
|
|
|
+ //设置工作表标题名称
|
|
|
|
+ $worksheet->setTitle('学员成绩信息');
|
|
|
|
+
|
|
|
|
+ $worksheet->setCellValue('A1',"序号");
|
|
|
|
+ $worksheet->setCellValue('B1',"学号");
|
|
|
|
+ $worksheet->setCellValue('C1',"姓名");
|
|
|
|
+ $worksheet->setCellValue('D1',"总分");
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ foreach ($data as $ky => $value)
|
|
|
|
+ {
|
|
|
|
+ $lie = $ky+2;
|
|
|
|
+ $worksheet->setCellValue('A'.$lie,++$ky);
|
|
|
|
+ $worksheet->setCellValue('B'.$lie,$value['user_username']);
|
|
|
|
+ $worksheet->setCellValue('C'.$lie,$value['user_nickname']);
|
|
|
|
+ $worksheet->setCellValue('D'.$lie,$value['total_score']);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ $titlestyleArray = [
|
|
|
|
+ 'font' => [
|
|
|
|
+ 'name' => '黑体',
|
|
|
|
+ 'size' => 14
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $headerStyleArray = [
|
|
|
|
+ 'font' => [
|
|
|
|
+ 'name' => '方正小标宋简体',
|
|
|
|
+ 'size' => 18
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ $commonStyleArray = [
|
|
|
|
+ 'alignment' => [
|
|
|
|
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
|
|
|
|
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
|
|
|
|
+ 'wrapText' => true,
|
|
|
|
+ ]
|
|
|
|
+ ];
|
|
|
|
+ $borderStyleArray = [
|
|
|
|
+ 'borders' => [
|
|
|
|
+ 'allBorders' => [
|
|
|
|
+// 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
|
|
|
|
+ ],
|
|
|
|
+ ],
|
|
|
|
+ 'font' => [
|
|
|
|
+ 'name' => '黑体',
|
|
|
|
+ ],
|
|
|
|
+ 'alignment' => [
|
|
|
|
+ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
|
|
|
|
+ 'vertical' => \PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER,
|
|
|
|
+ 'wrapText' => true,
|
|
|
|
+ ]
|
|
|
|
+ ];
|
|
|
|
+ $worksheet->getStyle('A1:D1')->applyFromArray($titlestyleArray);
|
|
|
|
+ $worksheet->getStyle('A1:D1')->applyFromArray($commonStyleArray);
|
|
|
|
+ foreach ($data as $k=>$v){
|
|
|
|
+ $kk = $k+2;
|
|
|
|
+ $worksheet->getStyle('A'.$kk.':D'.$kk)->applyFromArray($borderStyleArray);
|
|
|
|
+ }
|
|
|
|
+ // $worksheet->getStyle('A3:R3')->applyFromArray($commonStyleArray);
|
|
|
|
+ // $worksheet->getStyle('A'.$footer_total.':R'.$footer_total)->applyFromArray($commonStyleArray);
|
|
|
|
+ // $worksheet->getStyle('A1:C1')->applyFromArray($borderStyleArray);
|
|
|
|
+ // $worksheet->mergeCells('A1:R1');
|
|
|
|
+ $writer = IOFactory::createWriter($spreadsheet,$ext);
|
|
|
|
+ $writer->save('php://output');
|
|
|
|
+ die();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|