我正在整理一个python脚本,它将“清理”一个PowerPoint文件的font-face,font-colors,font-size等。我发现了一段代码,可以完成我需要它做的事情,不过它一旦它遇到幻灯片中的图像,它似乎就会中断。
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。然而,图像非常重要。
详细说明:
Python 3.3
PowerPoint 2007
希望一次完成批量转换200-300 PPT(x)的脚本。
如果您需要更多详情,请与我们联系! 谢谢!
答案 0 :(得分: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始终为true,因为对象符合true。尝试询问对象的长度大于0或类似的东西。
答案 1 :(得分:1)
您可以使用以下内容包围活动代码:
If Shape.HasTextFrame Then
If Shape.TextFrame.HasText Then
' do your stuff
End If
End If