使用Python玩转word

需求:客户提供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的数据里,不同的试题的题目和内容排列顺序是随机排列。
感谢慕课网、菜鸟网、易百网提供的技术辅导。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值