一、背景介绍
本文使用pptx库来实现PPT文件内容读取、关键字替换、插入超链接等自动化处理。该库为三方库,需要提前安装:
pip install python-pptx
使用该库前需要先了解一些pptx的基础知识,下图标识出了常用的属性
二、替换关键字
将目标PPT中所有的“任务”替换为“TASK”,并将“TASK”标红
import mimetypes
import pptx_ea_font
from pptx import Presentation
from pptx.dml.color import RGBColor
def ppt_keyword_replace(file, keyword_before, keyword_after):
"""
替换ppt中的关键字
"""
if is_ppt(file): # 若是ppt
ppt = Presentation(file) # 加载ppt
for sld in ppt.slides: # 页面
for sp in sld.shapes: # 框
# if sp.shap_type==MSO_SHAPE_TYPE.TEXT_BOX:
if sp.has_text_frame: # 若包含文本框
tf = sp.text_frame # 文本框
para = tf.paragraphs # 段落
for p in para: # 段落
for r in p.runs: # 文本块
if keyword_before in r.text: # 若keyword在文本块中
# 获取当前文本块的字体
font_name = r.font.name
font_size = r.font.size
bold = r.font.bold
# color = r.font.color.rgb # ppt获取字体颜色为默认的主题颜色'_SchemeColor',无法找到对应的颜色类型
# 使用keyword分割文本
split_text = r.text.split(keyword_before)
# 当前文本块的内容置空
r.text = ''
for i in split_text[:-1]: # 遍历split_text列表中除了最后一个元素之外的所有元素(避免在文本块末尾添加search_text)
# 添加split_text列表中的元素
split_run = p.add_run()
split_run.text = i
set_font(split_run, font_name, font_size, bold) # 设置为原文本块的字体
# 添加keyword_after
keyword_run = p.add_run()
keyword_run.text = keyword_after
set_font(keyword_run, font_name, font_size, bold) # 设置为原文本块的字体
keyword_run.font.color.rgb = RGBColor(255, 0, 0) # 设置为红色
# 添加split_text列表中最后一个元素
last_run = p.add_run()
last_run.text = split_text[-1]
set_font(last_run, font_name, font_size, bold) # 设置为原文本块的字体
ppt.save('replaced.pptx') # 保存ppt
def is_ppt(file):
"""
判断是否为ppt
"""
mime_type, encoding = mimetypes.guess_type(file)
if mime_type:
if mime_type.endswith(('presentation', 'powerpoint')):
return True
return False
return False
def set_font(run, font_name, font_size, bold):
"""
设置段落的字体
"""
# run.font.name = font_name # 只能修改英文和数字的字体
pptx_ea_font.set_font(run, font_name)
run.font.size = font_size
run.font.bold = bold
# run.font.color.grb = color # ppt获取字体颜色为默认的主题颜色'_SchemeColor',设置时无法找到对应的颜色类型
if __name__ == "__main__":
file_path = 'temp1.pptx'
old_text = '任务'
new_text = 'task'.upper()
ppt_keyword_replace(file_path, old_text, new_text)
运行结果:
三、插入超链接
在PPT中插入超链接,在播放PPT时点击文本框即可跳转至超链接
为“任务数”和“成功率”分别添加本地超链接文件
def ppt_add_hyperlink(file):
"""
向ppt中添加超链接
"""
if is_ppt(file):
ppt = Presentation(file) # 加载ppt
sld = ppt.slides[0] # 第1页
# 查看占位符
for ph in sld.placeholders: # 占位符
phf = ph.placeholder_format # 占位符格式
# print(f"下标:{phf.idx} 名称:{ph.name} 文本:{ph.text}")
# 编辑占位符
task_num = sld.placeholders[13]
success_rate = sld.placeholders[14]
task_num.click_action.hyperlink.address = r"D:\Python Projects\2024\Office_Handle\2024年1月任务数量统计.svg" # 添加超链接
success_rate.click_action.hyperlink.address = r"D:\Python Projects\2024\Office_Handle\2024年1月成功率统计.svg"
ppt.save(file) # 保存ppt
if __name__ == "__main__":
file_path = '任务数据统计.pptx'
ppt_add_hyperlink(file_path)
运行结果: