内容正文:
情景四 Python与办公自动化
教学课题
word自动化
序号
1
课时
2
教学手段
多媒体、板书、实训室
教学方法
讲授法、演示法、案例法
教学课型
□理论 □实训 √一体化 □( 其它 )
教学目标
能力目标:能够按要求熟练完成word文档的创建和指定内容的写入,能够熟练掌握word文档中插入图片和表格的方法、能够创建自定义样式来优化代码、提高效率,同时熟练掌握读取word文档的方法。
知识目标:了解python-docx的特点、掌握新建、写入、读取word文档的方法。
素质目标:接受新知识、自主学习的能力 。
教学重点
插入图片和表格、样式处理
教学难点
读取word文档
教学过程设计
备注
一、复习上一节上课内容并引出本节上课内容
在上一节中我们已经学习了文件操作,能够根据实际需求熟练运用read( )、readline( )和readlines( )来读取文件,通过 write( )和writelines( )来写文件。但如果我要读取或写入的对象是常用的办公文件,这个时候又该如何操作呢?这就是我们情景四要学习的办公自动化,首先我们来学习第一节内容word自动化。
二、教学内容
1、Python-docx简介
python-docx是用于创建和修改word文档的一个 python 库,它实现word文档的自动化处理,包括批量生成word文档、在word文档中批量进行查找和替换、在word文档中插入excel表格、将word文档批量转换成PDF等,提供全套的word操作,是办公自动化中一个很实用的库。
python-docx将整个文章看作是一个Document对象、每个Document包含多个代表“段落”的Paragraph对象,存放在document.paragraphs中;每个Paragraph都有多个代表“行内元素”的Run对象,代表内容的text对象,和代表表格的tables对象。
2、 新建word文档
在python-docx中,一个word文档用一个Document对象来表示,所以我们要新建一个word文档,只需要实例化一个Document对象即可,参考代码如下。
from docx import Document
#第一步:创建一个文档对象doc1
doc1 = Document()
#第二步:对象调用save()保存文档
doc1.save(cqcvc.docx')
print('创建文档成功!')
通过上述两个步骤的操作,程序运行后一个名称为“cqcvc.docx”文档就创建好了,通过鼠标双击就可以打开,但此时这个word文档是空的,没有任何信息。
3、写入word文档
在编辑word文档前,首先需要选中操作对象,所以把文档标题、段落信息等对象先写入到文档中,写入文档参考代码如下。
from docx import Document
#读取现有的文档
doc1 =Document('cqcvc.docx')
#添加文档总标题和段落
doc1.add_heading('重庆城市职业学院简介',level=0)
doc1.add_paragraph('重庆城市职业学院是教育部备案,\
重庆市人民政府举办,重庆市教委主管的全日制公办高等院校。')
#添加一级标题和段落
doc1.add_heading('办学理念',level=1)
doc1.add_paragraph('行大道 启大智 铸大匠 通大悟')
doc1.add_heading('校训',level=1)
doc1.add_paragraph('求德 求知 求技 求悟')
doc1.add_heading('校风',level=1)
doc1.add_paragraph('坚卓勤勉 自强奋进')
doc1.add_heading('教风',level=1)
doc1.add_paragraph('德润匠心 善导业精')
doc1.add_heading('学风',level=1)
doc1.add_paragraph('红色匠心 精益求精')
#保存文档
doc1.save('cqcvc.docx')
print('写入文档成功!')
上述代码运行后,双击打开“cqcvc.docx”文档,效果如下图所示。
4、插入图片和表格
在进行word文档编辑的时,经常会向文档中插入图片和表格,并且需要调整图片的高度和宽度、往表格中插入标题和各单元格添加数据等操作。如果只是插入几幅图片、几个表格当然可以直接用应用软件来完成;但是如果要处理的图片和表格数据巨大,有成长上万张图片和表格需要处理,此时首选编写程序来快速、批量完成重复操作。插入图片和表格参考代码如下,运行后的效果如下图所示。
from docx import Document
from docx.shared import Pt
doc1 = Document()
doc1.add_heading('文档中插入图片和表格',level=0)
#插入图片cqcvc.jpg
doc1.add_picture('D:\\yd\\cqcvc.jpg',Pt(435),Pt(230))
print('文档插入图片成功!')
#插入3行3列的表格,'Table Grid'是表格边框常用的样式
table = doc1.add_table(rows=3,cols=3,style='Table Grid')
#定位第一个表格
table = doc1.tables[0]
table.add_row() #在表格最底部添加一行
# 标题行单元格添加关键字
hc= table.rows[0].cells
hc[0].text='学号'
hc[1].text='姓名'
hc[2].text='年龄'
row1 = table.rows[1]
row1.cells[0].text = '2022001'
row1.cells[1].text = '张三'
row1.cells[2].text ='18'
row2 = table.rows[2]
row2.cells[0].text = '2022002'
row2.cells[1].text = '李四'
row2.cells[2].text ='19'
row3= table.rows[3]
row3.cells[0].text = '2022003'
row3.cells[1].text = '王五'
row3.cells[2].text ='20'
print('文档插入表格成功!')
doc1.save('insert_pic_table.docx')
print('文档保存成功!')
5、样式处理
如果文档中有很多的段落,每个段落的中、英文字体、字号、颜色等设置相同,为了优化代码、提高效率可以提前按照要求创建一个样式对象,将此样式对象按要求设置好;以后再添加段落时无需进行设置,直接应用该样式即可,样式处理参考代码如下。
from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt,RGBColor
from docx.oxml.ns import qn
doc1 = Document()
header = doc1.sections[0].header # 获取第一节的页眉
header.add_paragraph('重庆城市职业学院欢迎你!')# 添加页眉
footer = doc1.sections[0].footer # 获取第一节的页脚
footer.add_paragraph('重庆市永川区兴龙大道1099号') # 添加页脚
#创建样式对象s1
s1 = doc1.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)
s1.font.name = 'Times New Roman'
s1.font.element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')#设置字体
s1.font.size = Pt(16) #设置字号
s1.font.color.rgb = RGBColor(0, 0, 255) #设置颜色
# 首行缩进两个字符
paragraph_format=s1.paragraph_format
paragraph_format.first_line_indent=406400
t0=doc1.add_heading('重庆城市职业学院简介',level=0)
t0.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER#标题居中
doc1.add_heading('历史沿革',level=1)
#应用样式
doc1.add_paragraph(style=s1).add_run('学校发轫于1950年,始为重庆工人政治学校,\
后为重庆市工会干部学校;2004年4月,经重庆市人民政府批准,同意在重庆市职工\
大学、重庆市工会干部学校基础上,设立重庆城市职业学院;2013年9月,经重庆市\
人民政府批准,行政主管部门由重庆市总工会变更为重庆市教育委员会;\
2021年7月,入选“重庆市高水平高职学校建设单位”。')
doc1.add_heading('区位优势',level=1)
#应用样式
doc1.add_paragraph(style=s1).add_run('学校地处西部职教基地、重庆永川国家级高新区、\
大数据产业园核心地段,坐拥观音山公园和凤凰湖公园,是一所建在高新园区和都市\
公园里的大学,毗邻永川万达广场、乐和乐都主题公园,环境优美、交通便捷,\
乘高铁到重庆主城仅需16分钟。')
doc1.add_heading('办学条件',level=1)
#应用样式
doc1.add_paragraph(style=s1).add_run('学校占地910余亩,校舍建筑面积30万平方米\
(含规划在建面积),现有全日制在校学生1万余人。学校现有教学科研实训用房\
6万平方米,图书馆近9000余平方米,馆藏图书44万余册,电子图书100万册,\
学生公寓7.4万平方米。学校立足“重庆市智慧校园示范校”项目建设,\
打造“数据开放共享、资源丰富优质、治理透明高效、服务便捷周到、\
信息安全可靠”的高水平“智慧城职”。\
建有校内实践教学基地70余个,校外实习实训基地200余个。')
doc1.save('style.docx')
print('样式处理成功!')
6、读取word文档
如果需要读取word文档中的内容,参考代码如下,运行后输出的结果如下图所示。
from docx import Document
# 打开文档
document = Document('style.docx')
# 读取标题、段落、列表内容
ps = [ paragraph.text for paragraph in document.paragraphs]
for p in ps:
print(p)
# 读取表格内容
ts = [table for table in document.tables]
for t in ts:
for row in t.rows:
for cell in row.cells:
print(cell.text, end=' ')
print()
三、总结
通过本次任务的学习和实践,使我们了解了python-docx第三方库的作用,掌握了文档的基本结构,并且通过综合实训的引导,能够熟练完成文档的创建和修改、在文档中插入图片和表格、样式的创建和应用以及编写程序读取指定的word文档。建议同学们将有针对性的部分功能尽量使用函数来完成,需要的时候直接调用该函数即可,不需要再进行重复编码。
作业布置
读取word文档中的内容
教学反思
学科网(北京)股份有限公司
$$