效果图
思路
通过处理excel中不同的sheet,将每个题的顺序还有题内选项的顺序随机处理后,生成不同版本的试题
使用到的库
import random
import xlrd
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
获取试题列表
wb = xlrd.open_workbook('./file/试题2.xls')
创建试题列表
class Question:
pass
def createQuestion(sheet):
# 创建试题列表
questionList = []
for i in range(sheet.nrows):
if i > 1:
obj = Question()
# 题目
obj.subject = sheet.cell_value(i, 1, )
# 题型
obj.questionType = sheet.cell_value(i, 2, )
# 选项A,B,C,D
obj.option = []
obj.option.append(sheet.cell_value(i, 3))
obj.option.append(sheet.cell_value(i, 4))
obj.option.append(sheet.cell_value(i, 5))
obj.option.append(sheet.cell_value(i, 6))
# 分值
obj.score = sheet.cell_value(i, 7)
questionList.append(obj)
# 将序列中所有元素随机排序
random.shuffle(questionList)
return questionList
生成Word试卷模板
# 生成word试卷模板
def createPaper(filename,papername,questionlist):
document = Document()
# 页眉页脚
section = document.sections[0]
header = section.header
p1=header.paragraphs[0]
p1.text = papername
footer = section.footer
p2=footer.paragraphs[0]
p2.text = '内部试题,禁止泄露!!!'
# 试卷基本信息
title= document.add_heading(papername,level=1)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
p3 = document.add_paragraph()
p3.add_run('姓名:________')
p3.add_run('所属部门:________')
p3.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 试题信息
number =0
for question in questionlist:
number+=1
subject = document.add_paragraph()
run = subject.add_run('%d '%number+question.subject)
# 题目加粗
run.blod=True
subject.add_run('[%s]分'%str(question.score))
# 打乱选项的顺序
random.shuffle(question.option)
for index,option in enumerate(question.option):
document.add_paragraph(('ABCD')[index]+str(option))
document.save(filename)
创建试卷
for j in range(len(wb.sheets())):
sheet = wb.sheet_by_index(j)
for i in range(5):
questionList = createQuestion(sheet)
createPaper('./file/%s'%sheet.name+str(i+1)+'.docx','2022年%s'%sheet.name+'第一次考试',questionList)