需求:客户提供Excel表格试题试卷,要求我们随机生成10份word文档试卷,试题内容随机排序。
读取Excel中数据
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 2 11:22:12 2020
@author: Administrator
"""
#总功能,读取EXCEL中的题目,按照人数随机输出不同的题型。
import xlrd
import random
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
#读取Excel
data=xlrd.open_workbook('data5_word.xlsx')#表名
sheet=data.sheet_by_index(0)
class Question:
pass
def createQuestion():
questionlist=[]
for i in range(sheet.nrows):#抓取表格中列数
if i > 1:
obj=Question()
obj.subject=sheet.cell(i,1).value #题目
obj.questiontype = sheet.cell(i,2).value#题型
obj.option=[]
obj.option.append(sheet.cell(i,3).value)#a
obj.option.append(sheet.cell(i,4).value)#b
obj.option.append(sheet.cell(i,5).value)#c
obj.option.append(sheet.cell(i,6).value)#d
obj.score = sheet.cell(i,7).value #分值
questionlist.append(obj)
random.shuffle(questionlist)#将序列所有的元素随机排列
return questionlist
data5_word.xlsx表格数据:
生成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
#试题题目
for question in questionlist:
subject=document.add_paragraph(style='List Number')
run=subject.add_run(question.subject)
run.bold=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 i in range(10):#随机生成10份word试卷
questionlist=createQuestion()
createPaper('parer'+str(i+1)+'.docx', '2020年第一季度内部考试', questionlist)#传送参数
验证结果:
生成十份word文档。
对比文档内容的排列:
对比同一题型的排列:
结论:参考实验结果,成功生成的word的数据里,不同的试题的题目和内容排列顺序是随机排列。
感谢慕课网、菜鸟网、易百网提供的技术辅导。