Python 操作 Word 样式处理

上一个小节我们学习了如何通过 python-docx 模块写入 Word 文件,内容已经成功写入了,但是样式稍微有点惨不忍睹。平时的工作中我们操作 Word 文件的时候除了要保证内容精良之外,样式也是不可或缺的,优美的文字排版可以极大地增加阅读体验,那么本小节我们就来学习下如何使用 Python 来美化我们的 Word 文档。

Tips:本小节代码是在上一小节代码的基础上继续补充样式处理部分。

1. 插入页眉页脚

编写 Word 文档时除了正文内容外,还有一部分也很关键,就是页眉和页脚,通常我们习惯在页眉处加入公司名称或 logo,在页脚添加页码或其他声明信息。在软件中编辑页眉和页脚如下图所示。

图片描述

对于文档通篇页眉页脚内容一致的情况下可以使用软件完成编辑,但如果页眉和页脚在不同页中有不同展示效果,比如奇数页和偶数页显示不同的内容,很明显手动编辑的方式就不再适用了,这时可以通过 python-docx 模块编辑页眉和页脚。

1.1 插入页眉

为文档 info.docx 设置页眉,代码如下:

from docx import Document
document = Document("C:/info.docx") 

header = document.sections[0].header # 获取第一个节的页眉
header.add_paragraph('这是第一节的页眉')
document.save('C:/info.docx')

代码解释:代码中首先读取上一小节中完成的 info.docx 文档,加载完成后,获取文档中 sections 部分,索引为 0 即获取第一部分,根据 header 属性获取页眉,在页眉插入段落。运行后,info.docx 文档的页眉效果如下图所示。

图片描述

1.2 插入页脚

为文档 info.docx 设置页脚,代码如下:

from docx import Document
document = Document("C:/info.docx") 

footer = document.sections[0].footer # 获取第一个节的页脚
footer.add_paragraph('这是第一节的页脚') # 为第一页添加页脚
document.save('C:/info.docx')

代码解释:代码中首先读取上一小节中完成的 info.docx 文档,加载完成后,获取文档中 sections 部分,索引为 0 即获取第一部分,根据 footer 属性获取页脚,在页脚插入段落。运行后代码后 info.docx 文档的页脚效果如下图所示。

图片描述

2. 样式处理

下图中的两个段落,哪种是你更喜欢的呢?

图片描述

很显然,段落2看起来更赏心悦目,在 Word 文档中相同元素的格式一致时,阅读起来效果更佳。为了实现这种一致性,专业文档设计人员开发了一个样式表,该样式表定义了文档元素类型并指定了每种格式的格式。python-docx 操作 Word 提供了段落样式(PARAGRAPH)、字符样式(CHARACTER)、表格样式(TABLE)和列表样式(LIST),下面根据介绍段落和表格写入的内容如何添加样式。

2.1 添加样式步骤

步骤1:创建样式对象

# 定义变量style接收返回新添加的样式对象
style = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)

add_style()方法返回一个新添加的样式对象,第一个参数为自定义的样子名称,第二个参数为WD_STYLE_TYPE,这是一个枚举值,取值范围包括:paragraph, character, list, table。

步骤2:设置样式属性

style = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)
# 设置字体大小
style.font.size = Pt(16)
# 设置字体颜色
style.font.color.rgb = RGBColor(235, 33, 24)

使用add_style()方法创建新的样式对象,接下来通过提供的属性进行样式设置,代码中font.size为设置字体大小,font.color为设置字体颜色,取值为RGB颜色值。

步骤3:应用样式

# 添加新的段落
p1 = document.add_paragraph(
    '慕课网是垂直的互联网IT技能免费学习网站。以独家视频教程、在线编程工具、学习计划、问答社区为核心特色。在这里,你可以找到最好的互联网技术牛人,也可以通过免费的在线公开视频课程学习国内领先的互联网IT技术',style=style)

add_paragraph()方法为添加一个新的段落,第一个参数为段落的内容,第二个参数为段落要应用的样式,代码中将步骤1和步骤2中所创建的样式对象应用到了该段落上。

2.2 添加段落样式

了解了添加样式的步骤之后,接下来看下如何为段落添加样式。

...省略部分代码
style = document.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.size = Pt(16)
style.font.color.rgb = RGBColor(235, 33, 24)
#段落
p1 = document.add_paragraph(
    '慕课网是垂直的互联网IT技能免费学习网站。以独家视频教程、在线编程工具、学习计划、问答社区为核心特色。在这里,你可以找到最好的互联网技术牛人,也可以通过免费的在线公开视频课程学习国内领先的互联网IT技术',style=style)

代码解释:通过 add_style() 方法创建样式对象后,设置字体大小和字体颜色,其中 Pt(16) 对应字号如下图所示。

图片描述

将构建好的样式对象赋值给 p1 的 style。执行完成后,info.docx 文档效果如下图所示。

图片描述

2.3 添加列表样式

在文档中,列表也是经常出现的一部分,下面看下如何为段落添加列表样式。

# 添加一个新的段落,应用列表样式
document.add_paragraph('Python轻松学', style='List Number'
)
document.add_paragraph('Python经典入门', style='List Number'
)

代码解释:使用add_paragraph()方法添加的一个新的段落,第一个参数为段落的文本内容,第二个参数为段落应用的样式,这里采用的是内置样式,设置为ListNumber。执行完成后 info.docx 文档效果如下图所示。
图片描述

2.3 添加表格样式

接下来看下如何为表格添加样式。

...省略部分代码
table = document.add_table(rows=1, cols=3, style='Medium List 2')
header_cells = table.rows[0].cells
header_cells[0].text = '新上好课'
header_cells[1].text = '讲师'
header_cells[2].text = '价格'
table1 = document.add_table(rows=1, cols=3, style='Dark List')
header_cells = table1 .rows[0].cells
header_cells[0].text = '新上好课'
header_cells[1].text = '讲师'
header_cells[2].text = '价格'

代码解释:在 add_table() 方法中设置 style 所应用的样式,这里的样式采用的是内置样式,更多表格样式可以访问这里。执行完成后 info.docx 文档效果如下图所示。

图片描述

3. 小结

本节课程我们主要学习了 python-docx模块的使用。本节课程的重点如下:

  • 掌握 python-docx模块中插入页眉、页脚的使用方法;
  • 掌握 python-docx模块中为段落、表格添加样式的方法;

图片描述