05《Python 办公自动化教程》操作 Word 样式处理

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

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

1. 插入页眉页脚

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

5fd4ebe2095882fe06640729.jpg

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

5fd4ebee0981e75507630478.jpg

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 文档的页脚效果如下图所示。

5fd4ebf9094577f507620478.jpg

2. 样式处理

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

5fd4ec0309b7146e08570564.jpg

很显然,段落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) 对应字号如下图所示。

5fd4eb80094a2785026704261.jpg

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

5fd4ec1f09faac8d08620558.jpg

2.3 添加列表样式

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

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

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


5fd4ec1f09faac8d08620558.jpg

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 文档效果如下图所示。

5fd4ec4a09eeff8108730496.jpg

3. 小结

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

  • 掌握 python-docx模块中插入页眉、页脚的使用方法;
  • 掌握 python-docx模块中为段落、表格添加样式的方法;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容