我有一個腳本,我想批量編輯PowerPoint文件。如果我一個一個編輯文件,它會很好。如果我批量編輯它們,它會失敗。我認爲這是因爲在下一個文件嘗試加載之前應用程序沒有關閉,但是我可能並且很可能是錯誤的。Python:在應用程序關閉時暫停for循環
代碼:
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
如果您需要更多詳情,我會很高興爲您提供! 謝謝!
添加'time.sleep(1)'處理每個演示改變任何東西后?無論如何,*從來沒有*使用裸露的'除了:'。你應該總是指定要捕捉哪個異常。在你的例子中,你應該確定只捕獲那個'com_error'。 (如果文件夾:對於文件夾中的文件,做一個小的備註就和簡單的'對於文件夾中的文件'是一樣的。當'文件夾'爲空時,'for'永遠不會執行。) – Bakuriu
感謝您提供最佳實踐建議。我對Python仍然很陌生。 我在處理的開始和結束處添加了time.sleep(1),它似乎阻止了application.quit。我嘗試添加一個10秒的睡眠,它只是等待10秒,然後關閉PPT窗口。 – Eric
爲什麼您需要關閉應用程序,只需加載一個新文件,然後在每個文件處理完畢後關閉。它的速度也更快。 – joojaa