Python自动化 考试系统生成Word

导入模块

#pywin32是WIndows的API
#安装python没有win32com,需要pip install pypiwin32进行安装
from win32com.client import constants,gencache 
#系统
import os 

读取Excel

#1.读取Excel
#创建打开excel对象
data = xlrd.open_workbook('data3.xlsx')
#打开工作表对象
sheet = data.sheet_by_index(0)  #索引

首先使用open_workbook()打开工作簿,使用sheet_by_index()索引第一个工作表

定义类进行存储数据

#定义类进行存储数据
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

创建一个对象实例化,将各个参数存储在实例化对象中,然后添加到数组questionlist,然后使用random随机改变选项数据,最后返回数组的数据questionlist数据

生成试卷

#生成word试卷
'''
filename:
papername:试卷的名称
questionlist:试卷的题
'''
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)  #level设置为一级标题 
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER    #设置标题居中
    ##添加段落
    info = document.add_paragraph()   #添加段落
    info.add_run('姓名:______')    #追加信息
    info.add_run('所属部门:______')    #追加信息
    info.alignment = WD_ALIGN_PARAGRAPH.CENTER    #设置段落居中

    #具体试题的信息
    ##循环遍历试题列表
    for question in questionlist:
        #添加段落
        subject = document.add_paragraph(style='List Number')  #style中添加序号 
        run = subject.add_run(question.subject)  #追加题目
        run.bold = True     #题目加粗
        subject.add_run('[%s]分'%(question.score))
        random.shuffle(question.option)  #随机洗牌选项
        #循环遍历option
        for index,option in enumerate(question.option):
            #添加段落,ABCD
            document.add_paragraph(('ABCD')[index]+(str(option)))


    #存储文档
    document.save(filename)

生成文档,设置页眉页脚的信息,然后再设置试卷的基本信息,使用for循环遍历questionlist循环添加题目和选项,最后使用document.save()保存文档

生成多个试卷

for i in range(10):        
    #生成多个试卷
    questionlist = createQuestion()
    #文件名称  试卷名称   问题
    createPaper('paper'+str(i+1)+'.docx','2020年第一季度内部考试',questionlist)

使用for循环创建10个试卷,createPaper()添加对应的实际参数,第一个参数文件名,第二个参数试卷标题,第三个参数是试题库

posted @ 2022-10-02 12:03  Crown-V  阅读(264)  评论(0)    收藏  举报