阅读背景:

记一次php 导出word文档

来源:互联网 

导出试卷  先看效果

$paper = Exam::where('id', $data['examid'])->field('paper_id,title')->find(); $bankIds = PaperStorehouse::where('id', $paper['paper_id'])->value('banks'); $field = 'type,rate,name,options,parsing,value,question_id,parsing_id'; $bankInfo = Banks::where('id', 'in', $bankIds)->field($field)->select() ->map(function ($item) { if ($item['question_id'] == 0) { $item['question_id'] = ''; } else { $item['question_id'] = getDomain(File::where('id', $item['question_id'])->value('filepath')); } if ($item['parsing_id'] == 0) { $item['parsing_id'] = ''; } else { $item['parsing_id'] = getDomain(File::where('id', $item['parsing_id'])->value('filepath')); } $item['rate'] = taskdegreeName($item['rate']); $item['typeTxt'] = bankTxt($item['type']); $options = json_decode($item['options'], true); $item['Aanswer'] = $options[0]['value'] ?: ''; $item['Banswer'] = $options[1]['value'] ?: ''; $item['Canswer'] = $options[2]['value'] ?: ''; $item['Danswer'] = $options[3]['value'] ?: ''; return $item; }); // $singles $multi $judge $operate $filling $read $sub $singles = []; $multi = []; $subjectivity = []; $judge = []; foreach ($bankInfo as $k => $v) { if ($v['type'] == 1) { $singles[] = $v; } elseif ($v['type'] == 2) { $multi[] = $v; } elseif ($v['type'] == 3) { $judge[] = $v; } else { $subjectivity[] = $v; } } $path = public_path(); $tmp = new TemplateProcessor($path . 'word.docx'); $singlesNum = count($singles); $multiNum = count($multi); $judgeNum = count($judge); $subjectivityNum = count($subjectivity); $tmp->setValue('examTitle', $paper['title']); $tmp->cloneRow('singles', $singlesNum); $tmp->cloneRow('multi', $multiNum); $tmp->cloneRow('judge', $judgeNum); $tmp->cloneRow('subjectivity', $subjectivityNum); for ($i = 0; $i < $singlesNum; $i++) { $tmp->setValue("singles#" . ($i + 1), $singles[$i]['typeTxt']); $tmp->setValue("singlesName#" . ($i + 1), $singles[$i]['name']); $tmp->setValue("AAanswer#" . ($i + 1), $singles[$i]['Aanswer']); $tmp->setValue("ABanswer#" . ($i + 1), $singles[$i]['Banswer']); $tmp->setValue("ACanswer#" . ($i + 1), $singles[$i]['Canswer']); $tmp->setValue("ADanswer#" . ($i + 1), $singles[$i]['Danswer']); } for ($i = 0; $i < $multiNum; $i++) { $tmp->setValue("multi#" . ($i + 1), $multi[$i]['typeTxt']); $tmp->setValue("multiName#" . ($i + 1), $multi[$i]['name']); $tmp->setValue("MAanswer#" . ($i + 1), $multi[$i]['Aanswer']); $tmp->setValue("MBanswer#" . ($i + 1), $multi[$i]['Banswer']); $tmp->setValue("MCanswer#" . ($i + 1), $multi[$i]['Canswer']); $tmp->setValue("MDanswer#" . ($i + 1), $multi[$i]['Danswer']); } for ($i = 0; $i < $judgeNum; $i++) { $tmp->setValue("judge#" . ($i + 1), $judge[$i]['typeTxt']); $tmp->setValue("judgeName#" . ($i + 1), $judge[$i]['name']); $tmp->setValue("Eanswer#" . ($i + 1), $judge[$i]['Aanswer']); $tmp->setValue("Fanswer#" . ($i + 1), $judge[$i]['Banswer']); } for ($i = 0; $i < $subjectivityNum; $i++) { $tmp->setValue("subjectivity#" . ($i + 1), $subjectivity[$i]['typeTxt']); $tmp->setValue("subjectivityName#" . ($i + 1), $subjectivity[$i]['name']); } $tmp->saveAs($path . 'target.docx'); //浏览器下载 ob_clean(); ob_start(); $fp = fopen($path . 'target.docx', "r"); $file_size = filesize($path . 'target.docx'); Header("Content-type:application/octet-stream"); Header("Accept-Ranges:bytes"); Header("Accept-Length:" . $file_size); Header("Content-Disposition:attchment; filename=" . '测试文件.docx'); $buffer = 1024; $file_count = 0; while (!feof($fp) && $file_count < $file_size) { $file_con = fread($fp, $buffer); $file_count += $buffer; echo $file_con; } fclose($fp); ob_end_flush(); $paper = Exam::where('id', $data['exami



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: