接上文Python开发从零开始-50.33-Office 文档处理,本文小编与大家分享 Python 处理 Office 文档的相关知识。
6)层级段落文本
PPT 文档的文本段落层级设置是常见需求,可以使用 _Paragraph 对象的 level 属性来实现。具体实现步骤如下:
使用占位符或者文本框的 text_frame 属性,获取 TextFrame 对象;
通过 TextFrame 对象获取 _Paragraph 对象;
设置 _Paragraph 对象的 level 属性值, 0 - 8 整数,0 为顶层,数值越大层级越深。
使用占位符设置层级段落文本的代码示例如下:
from pptx import Presentation# 创建一个新 PPT 文档prs = Presentation()# 如果 PPT 文档中只有一个母版,可以直接获取该母版的版式集合layouts = prs.slide_layouts# 从版式集合中获取标题和内容(Title and Content )版式对象layout = layouts.get_by_name('Title and Content')# 添加新幻灯片,将新幻灯片对象与版式对象绑定slide = prs.slides.add_slide(layout)# 获取 title 对象并添加文本slide.shapes.title.text = 'PPT 文档段落层级标准'# 从占位符集合中获取内容占位符place = slide.placeholders[1]# 从内容占位符中获取 TextFrame 对象tf = place.text_frame# 循环添加段落,并设置 level 级别和文本for i in range(0, 9):pra = tf.add_paragraph()pra.level = ipra.text = f'这是 {i} 级段落文本'# 保存 PPT 文档prs.save('example_text_add4.pptx')
代码执行后,生成 PPT 文档内容如下图所示:

使用文本框设置段落层级,只需获取文本框的 TextFrame 对象,之后与占位符操作完全相同。
小编提示:
占位符使用了预定义样式,不同层级文本会使用项目符号;文本框没有预定义样式,所以默认不会使用项目符号。
python-pptx 并不直接支持自定义项目符号,虽然可以通过添加形状(如圆形、三角形等),并放置在其段落文本旁边来模拟项目符号的效果,但这通常会涉及复杂的定位和额外的一些步骤。所以如果确实需要自定义项目符号,可以考虑先在 PPT 文档中编辑好模版,然后使用 python-pptx 读取并修改。 |
7)占位符添加文本的注意事项
① 占位符类型识别
pptx.shapes.base._PlaceholderFormat 对象提供与占位符相关的特定属性,例如占位符类型。该对象不应实例创建对象,通过占位符对象的 placeholder_format 属性返回。其常用属性包括:
type 属性: PP_PLACEHOLDER_TYPE 枚举值,用于标识占位符的功能类型。pptx.enum.shapes.PP_PLACEHOLDER_TYPE 枚举包含了 18 种占位符类型,其别名为 PP_PLACEHOLDER。常用枚举值包括:
TITLE:主标题,整数 1;
CENTER_TITLE:居中主标题,整数 3;
SUBTITLE:子标题,整数 4;
CHART:图标,整数 8;
TABLE:表格,整数 12;
SLIDE_NUMBER:页面编号(页面底部),整数 13;
FOOTER:页脚(页面底部),整数 15;
DATE:日期(页面底部),整数 16;
PICTURE:图片,整数 18;
idx 属性:整型,占位符在母版 / 版式中的唯一索引 ID,用于精确定位特定占位符。
遍历幻灯片占位符的代码示例如下:
from pptx import Presentation# 创建一个新 PPT 文档prs = Presentation()# 如果 PPT 文档中只有一个母版,可以直接获取该母版的版式集合layouts = prs.slide_layouts# 从版式集合中获取 Title Slide 版式对象layout = layouts.get_by_name('Title Slide')# 添加新幻灯片slide = prs.slides.add_slide(layout)# 遍历当前幻灯片中所有占位符,并输出其类型for p in slide.placeholders:print(p.placeholder_format.type)# 保存 PPT 文档prs.save('example_text_add7.pptx')
代码执行,终端输出如下:
>>> %Run example_place_type.pyCENTER_TITLE (3)SUBTITLE (4)>>>
注意:虽然 PPT 文档母版视图中 Title Slide 版式对象包含 5 个占位符

但是使用该版式对象添加幻灯片,实际上幻灯片占位符中只有 2 个。
② 使用占位符添加文本的注意事项
使用占位符添加文本是 python-pptx 中最稳健的排版方式,但需注意以下事项:
确定占位符是否存在,PPT 文档的母版视图可能会显示占位符及其位置,但是使用该版式创建幻灯片后,占位符不一定会正常加载,应检查幻灯片占位符集合中是否存在所需的占位符;
使用占用符类型时,尽量避免索引(idx)硬编码,应优先使用 PP_PLACEHOLDER 枚举值;
应注意组合形状(GroupShape)中的占位符,在顶层遍历中无法找到,通常需要进入组合形状才能获取。
受文章篇幅所限,下文将继续介绍 Python 处理 Office 文件的相关知识。