Python:应用程序关闭时暂停for循环

时间:2013-06-04 13:26:11

标签: python python-3.x powerpoint win32com powerpoint-2007

我有一个脚本,我想用它批量编辑powerpoint文件。如果我用它逐个编辑文件,它的效果很好。如果我批量编辑它们,它就会失败。我认为这是因为应用程序在下一个文件尝试加载之前没有关闭,但我可能,而且很可能是错误的。

代码:

import win32com.client, sys, glob


folder = (glob.glob('*.ppt'))

print("="*20)
print(folder)
print("="*20)

if folder:
    for files in folder:
        print("Current File: " + files)
        try:
            Application = win32com.client.Dispatch("PowerPoint.Application")
            Application.Visible = True
            Presentation = Application.Presentations.Open("c:/pptpy/testfolder/" + files)
            for Slide in Presentation.Slides:
                for Shape in Slide.Shapes:
                    try:
                        Shape.TextFrame.TextRange.Font.Name = "Arial"
                        Shape.TextFrame.TextRange.Font.Size = "14"
                        Shape.TextFrame.TextRange.Font.Color.RGB = "000000"
                    except:
                        pass
            Presentation.Save()
            Application.Quit()
                #Adding a time.sleep(1) here pauses the Application.Quit()
        except:
            print("Error in: " + files)
            pass

错误(未传递异常时):

Traceback (most recent call last):
  File "C:\pptpy\testfolder\convert.py", line 19, in <module>
    for Shape in Slide.Shapes:
  File "C:\Python33\lib\site-packages\win32com\client\dynamic.py", line 247, in __getitem__
    return self._get_good_object_(self._enum_.__getitem__(index))
  File "C:\Python33\lib\site-packages\win32com\client\util.py", line 37, in __getitem__
    return self.__GetIndex(index)
  File "C:\Python33\lib\site-packages\win32com\client\util.py", line 53, in __GetIndex
    result = self._oleobj_.Next(1)
pywintypes.com_error: (-2147023174, 'The RPC server is unavailable.', None, None)

详细说明:

Python3.3

Powerpoint2007

如果您需要更多详情,我很乐意为您提供! 谢谢!

1 个答案:

答案 0 :(得分:1)

尝试这样的事情(建立在之前的question上)。在提出这样的问题之前,你应该花时间设计你的代码:

import win32com.client
import sys # <- obsolete not used
import os
import glob # style guide one import per line


Application = win32com.client.Dispatch("PowerPoint.Application")
Application.Visible = True

ppt_files = glob.glob('*.ppt')

for file in ppt_files:
    file = os.path.abspath(file)
    Presentation = Application.Presentations.Open(file)
    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()
    Presentation.Close()

Application.Quit()