0

我正在整理一个 python 脚本,它将“清理”PowerPoint 文件的字体、字体颜色、字体大小等。我找到了一个代码片段,它可以完成我需要它做的事情,但是它似乎坏了只要它遇到幻灯片中的图像。

    import win32com.client, sys
Application = win32com.client.Dispatch("PowerPoint.Application")
Application.Visible = True
Presentation = Application.Presentations.Open(sys.argv[1])
for Slide in Presentation.Slides:
    for Shape in Slide.Shapes:
        Shape.TextFrame.TextRange.Font.Name = "Arial"
        Shape.TextFrame.TextRange.Font.Size = "12"
        Shape.TextFrame.TextRange.Font.Color.RGB = "000000"
Presentation.Save()
Application.Quit()

编辑:复制并粘贴错误的代码...删除了无效的 if 语句。

这一切都运行得很好,清理看起来很傻的字体和颜色,直到它出现第一个图像。然后它坏了,我看到了这个:

Traceback (most recent call last):
  File "c:/pptpy/convert.py", line 7, in <module>
    Shape.TextFrame.TextRange.Font.Name = "Arial"
  File "C:\Python33\lib\site-packages\win32com\client\dynamic.py", line 511, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, 'The specified value is out of range.', None, 0, -2147024809), None)

如果我从文件中删除所有图像(不是形状)并运行脚本,它会很好用,我会留下一个不错的 powerpoint。然而,图像非常重要。

细节:

蟒蛇 3.3

PowerPoint 2007

脚本一旦完成,希望一次转换 200-300 PPT(x) 的批次。

如果您需要更多详细信息,请告诉我!谢谢!

4

2 回答 2

1

虽然您的代码实际上无法正常工作,但用 try catch 替换您的 if 工作正常。这可能不是一个优雅的方法,很难。

import win32com.client, sys
Application = win32com.client.Dispatch("PowerPoint.Application")
Application.Visible = True
Presentation = Application.Presentations.Open(sys.argv[1])
for Slide in Presentation.Slides:
    for Shape in Slide.Shapes:
        try:
            Shape.TextFrame.TextRange.Font.Name = "Arial"
            Shape.TextFrame.TextRange.Font.Size = "12"
            Shape.TextFrame.TextRange.Font.Color.RGB = "000000"
        except:
            pass
Presentation.Save()
Application.Quit()  

你可能会发生的事情是 if 始终为真,因为一个对象有资格为真。尝试询问大于 0 或类似的对象的长度。

于 2013-06-04T10:38:20.017 回答
1

您可以使用以下内容围绕活动代码:

If Shape.HasTextFrame Then
   If Shape.TextFrame.HasText Then
      ' do your stuff
   End If
End If
于 2013-06-06T13:47:14.123 回答