如何更改.pptx文件的特定单词的字体颜色?

时间:2019-10-13 07:04:44

标签: python python-3.x python-pptx

searchInput = "chapter"
try:
    prs = Presentation("e:/test3/ch7.pptx")
    for slide in prs.slides:
        for shape in slide.shapes:
            if hasattr(shape, "text"):
                shape.text = shape.text.lower()
                for paragraph in shape.text_frame.paragraphs:
                    for run in paragraph.runs:
                        if searchInput in run.text:
                            print(run.text)
                            #run.font.color.rgb = RGBColor(0, 0, 255)


except PermissionError:
    pass
prs.save("e:/test3/ch7_modified1.pptx")

现在,我可以检查此“ ch7.pptx”文件是否包含要查找的特定单词。

如果我打印(run.text),它会打印出来

chapter 7:  synchronization examples
chapter 7: synchronization examples
end of chapter 7

因此,我可以看到有几个单词“章节”。 但是,我想在我的“ ch7.pptx”中将“章节”的颜色更改为黄色,然后我要保存到“ ch7_modified.pptx”

我一直在努力寻找如何更改颜色,但是它不能正常工作。请给我一些帮助!

1 个答案:

答案 0 :(得分:0)

不能保证给定的单词将在一次运行中开始和结束;任何给定的单词都可以分为多个部分,并且其部分可能包含之前和之后的文本。 PowerPoint会根据需要随意分割运行,也许是为了突出显示拼写错误的单词,或者只是在您暂停输入或输入拼写错误之类的内容时。

可以肯定地说,一次运行是它包含的所有字符共享相同的字符格式。

要完成您想做的事情,就需要一种更加复杂的算法,并且python-pptx还没有一些低级功能。

一般方法如下:

  • 找到一个包含搜索词的段落
  • 从该段落的
  • 中找到包含该单词的运行的子序列。通常,这是一个序列(列表),可以在单词开头和结尾之后包含文本。
  • 在单词start处将其中的第一个游程划分为两个(除非它在均匀的游程边界处开始)
  • 将这些游标的最后一个在单词末尾分成两部分(除非它在偶数游标边界处终止)
  • 将包含全部或部分单词的所有(中间)运行的格式设置为所需的设置

当前不支持对运行拆分位的API,这将需要使用python-pptx中的基础XML对象,这是一个高级主题。如果您想这样做,请在“ python-pptx解决方法功能”上搜索Google,这将为您提供一个起点。