课程名称: Python办公自动化
课程章节:第5章 玩转Word自动化
课程讲师: 离岛
课程内容:
考试系统生成Word试卷
从excel表格最终生成的样式如下
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中显示为 "与以前相同"。
课程收获:
本章节通过实战来对前面学习过的课程进行综合使用,不仅加深了前面课程的学习熟悉度,同样对实际工作中的更有帮助。后面进行努力