为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第10天 Python办公自动化

标签:
Python

课程名称Python办公自动化

课程章节:第5章 玩转Word自动化

课程讲师: 离岛



课程内容

        考试系统生成Word试卷

        


https://img3.sycdn.imooc.com/6323399d00018d0f09910489.jpg



https://img1.sycdn.imooc.com/632346780001de4e17500403.jpg


从excel表格最终生成的样式如下

https://img2.sycdn.imooc.com/6323468b0001299207980581.jpg


import xlrd2
import random
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
#1.读取excel
data=xlrd2.open_workbook('data3.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

#生成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
    footer_rng = footer.Range
    p2=footer.paragraphs[0]
    footer_rng.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(2):
    questionlist=createQuestion()
    createPaper('paper'+str(i+1)+'.docx','2020年第一季度内部考试',questionlist)

有关格式的内容依然可以通过官网提供的说明进行查询。

https://python-docx.readthedocs.io/



还有一个接口注意的是是否继承上一节的样式

is_linked_to_previous

True

值为True表示对象不包含标题定义,该节将显示与上一节相同的标题。这种"继承"行为是递归的,因此"链接"标题实际上从具有标题定义的第一个前一部分获得其定义。此"链接"状态在Word UI中显示为 "与以前相同"




课程收获
        本章节通过实战来对前面学习过的课程进行综合使用,不仅加深了前面课程的学习熟悉度,同样对实际工作中的更有帮助。后面进行努力


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消