You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python替换PPT中的段落内容?附Excel数据填充案例

实现Excel数据替换PPT段落内容的方法

所需工具库

  • 使用openpyxl读取Excel文件数据
  • 使用python-pptx操作PPT文件内容

步骤与代码示例

1. 读取Excel中的数据

先把Excel里的表头和对应数据整理成字典,方便后续调用:

from openpyxl import load_workbook

# 加载Excel文件
wb = load_workbook('myexcel.xlsx')
ws = wb.active

# 读取表头和数据行
headers = [cell.value for cell in ws[1]]
data = [cell.value for cell in ws[2]]
data_dict = dict(zip(headers, data))

# 最终得到字典:{'FirstName': 'Tim', 'LastName': 'Knight', 'Sex': 'Man'}

2. 遍历PPT并替换文本内容

遍历PPT的每一页幻灯片,逐个检查文本形状,替换指定占位符(示例中为ABC):

from pptx import Presentation

# 加载PPT文件
prs = Presentation('mypresentation.pptx')

# 定义替换规则,匹配需求中的替换逻辑
replace_rules = [
    # 幻灯片1标题:替换为Sex对应的值
    {'slide_idx': 0, 'text_type': 'title', 'target': 'ABC', 'replace_with': data_dict['Sex']},
    # 幻灯片1正文:替换FirstName对应的值
    {'slide_idx': 0, 'text_type': 'body', 'target': 'ABC', 'replace_with': data_dict['FirstName']},
    # 幻灯片2正文:替换LastName对应的值
    {'slide_idx': 1, 'text_type': 'body', 'target': 'ABC', 'replace_with': data_dict['LastName']}
]

for rule in replace_rules:
    slide = prs.slides[rule['slide_idx']]
    if rule['text_type'] == 'title':
        # 处理标题文本
        if slide.shapes.title:
            slide.shapes.title.text = slide.shapes.title.text.replace(rule['target'], rule['replace_with'])
    else:
        # 处理正文文本框
        for shape in slide.shapes:
            if not shape.has_text_frame:
                continue
            text_frame = shape.text_frame
            for paragraph in text_frame.paragraphs:
                for run in paragraph.runs:
                    run.text = run.text.replace(rule['target'], rule['replace_with'])

# 保存修改后的PPT
prs.save('modified_presentation.pptx')

3. 特殊情况处理

如果PPT内存在分组形状(多个形状组合在一起),需要递归遍历分组内的子形状,可添加以下辅助函数:

def replace_in_shape(shape, target, replace_with):
    if shape.has_text_frame:
        for paragraph in shape.text_frame.paragraphs:
            for run in paragraph.runs:
                run.text = run.text.replace(target, replace_with)
    if shape.has_group_shape:
        for sub_shape in shape.group_shape.shapes:
            replace_in_shape(sub_shape, target, replace_with)

之后在处理正文时,调用该函数替代原有的形状遍历逻辑即可。

另外建议将PPT中的占位符设置为更明确的标识(比如{{FirstName}}),能避免误替换无关内容,提升替换精准度。


内容的提问来源于stack exchange,提问作者Seda Başkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:10:00