Python自动化操作PPT

一、背景介绍

本文使用pptx库来实现PPT文件内容读取、关键字替换、插入超链接等自动化处理。该库为三方库,需要提前安装:

pip install python-pptx

使用该库前需要先了解一些pptx的基础知识,下图标识出了常用的属性

Python自动化操作PPT_Python

二、替换关键字

将目标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)

运行结果:

Python自动化操作PPT_PPT_02

三、插入超链接

在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)

运行结果:

Python自动化操作PPT_办公自动化_03

上一篇:不仅能够实现前后场的简单互动,而且能够实现人机结合,最终实现整个巡检流程的标准化的智慧园区开源了


下一篇:【Web前端】使用 Promise