如何使用Python和win32com.client在PowerPoint中操作形状(颜色)?

时间:2017-10-17 12:18:25

标签: python powerpoint win32com

由于我发布了这个问题后我手头的问题略有进展,我发现有必要将其拆分为两部分以保持清晰。

  1. 如何使用Python和win32com.client操作PowerPoint中的形状颜色?
  2. 如何使用dir()
  3. 检查Python中的com对象

    1。使用Python

    在PowerPoint中处理形状颜色

    有一些关于如何使用 pptx库 here编辑PowerPoint幻灯片的示例。但是,我发现使用 win32com.client 操作活动PowerPoint演示文稿要比here更容易。使用Microsoft Developer Network中的示例我发现我可以轻松复制此VBA片段功能的部分 ...

    With ActivePresentation.Slides(1).Shapes(1)
        With .TextFrame.TextRange.Font
            .Size = 48
            .Name = "Palatino"
            .Bold = True
            .Color.RGB = RGB(255, 127, 255)
        End With
    End With
    

    ...使用此Python代码段:

    import win32com.client
    Application = win32com.client.Dispatch("PowerPoint.Application") 
    Presentation = Application.Activepresentation
    
    slidenr = Presentation.Slides.Count    
    slide = Presentation.slides(slidenr)
    
    shape1 = slide.Shapes.AddTextbox(Orientation=0x1,Left=100,Top=100,Width=100,Height=100)
    shape1.TextFrame.TextRange.Text='Hello, world'    
    
    #Manipulate font size, name and boldness
    shape1.TextFrame.TextRange.Font.Size=20
    shape1.TextFrame.TextRange.Characters(1, 4).Font.Name = "Times New Roman"
    shape1.TextFrame.TextRange.Font.Bold=True
    

    在这里,我可以操作字体大小和名称。我也可以通过更改来更改文本框的方向 Orientation=0x1中的Orientation=0x5shape1 = slide.Shapes.AddTextbox(Orientation=0x1,Left=100,Top=100,Width=100,Height=100)

    但似乎不可能的是编辑框或字体颜色。

    这不起作用:

    shape1.TextFrame.TextRange.Font.Color.RGB = RGB(255, 127, 255)
    

    错误讯息:

    enter image description here

    我非常希望通过导入pypi.python.org

    上的信息导入一些RGB功能来解决这个问题

    但我在pip install colour

    也遇到了麻烦

    enter image description here

    到目前为止,我对所有帐户都有点失落,因此任何操纵颜色的方法都会很棒!

    2。使用dir()

    检查Python中的对象

    在我尝试管理这些讨厌的颜色时,我开始检查dir(shape1.TextFrame)dir(shape1.TextFrame.Textrange)的输出,依此类推。 令我失望的是,我找不到任何关于颜色的内容,甚至没有找到Font,尽管Font很容易被操作。

    所以我的第二个问题是:这不是检查和操纵这些形状的方法吗?我怎样才能找到正确的对象(或方法?)来进一步操纵shape1?我看过PowerPoint objectmodel,但收效甚微。

    感谢您的任何建议!

1 个答案:

答案 0 :(得分:2)

您可以在python脚本中轻松重新创建Global VBA功能

def RGB(red, green, blue):
    assert 0 <= red <=255    
    assert 0 <= green <=255
    assert 0 <= blue <=255
    return red + (green << 8) + (blue << 16)

关于你的第二个问题。了解这些对象的最佳位置是Excel宏对象浏览器。在宏编辑器中,按F2然后过滤Powerpoint库。然后,您可以搜索和探索与powerpoint

相关的对象模型

Object Browser