课程名称: 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中显示为 "与以前相同"。
课程收获:
本章节通过实战来对前面学习过的课程进行综合使用,不仅加深了前面课程的学习熟悉度,同样对实际工作中的更有帮助。后面进行努力
随时随地看视频