PowerPoint & Python: Das Bearbeiten von PPT schlägt fehl, wenn ein Bild erreicht ist

Ich stelle ein Python-Skript zusammen, das ein PowerPoint-Dateiformat, eine Schriftart-Schriftart, eine Schriftgröße usw. aufräumen wird. Ich habe ein Code-Snippet gefunden, das das tut, was ich brauche, aber es scheint zu brechen Sobald es ein Bild in einer Folie trifft.

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() 

EDIT: Kopiere und fügte den falschen Code ein … entfernte non-working if-Anweisung.

Das alles läuft ganz gut und bereinigt dumme Schriften und Farben, bis es auf das erste Bild trifft. Dann bricht es und ich bin mit diesem präsentiert:

 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) 

Wenn ich alle Bilder (nicht Formen) aus der Datei entfernen und das Skript ausführen, funktioniert es super und ich bin mit einem anständigen Powerpoint verlassen. Die Bilder sind aber sehr wichtig.

Details:

Python 3.3

PowerPoint 2007

Skript, um hoffentlich Batches von 200-300 PPT (x) zu einer Zeit, einmal fertig zu konvertieren.

Wenn du mehr Details brauchst, lass es mich wissen! Vielen Dank!

2 Solutions collect form web for “PowerPoint & Python: Das Bearbeiten von PPT schlägt fehl, wenn ein Bild erreicht ist”

Während dein Code ist eigentlich nicht funktionieren ersetzen Sie Ihre, wenn mit einem Versuch Fang funktioniert gut. Das ist vielleicht keine elegante Methode.

 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() 

Was dir wohl passiert ist, ist, dass das, wenn es immer wahr ist, da ein Objekt als wahr gilt. Versuchen Sie, die Länge des Objekts größer als 0 oder etwas ähnliches zu fragen.

Du kannst den aktiven Code mit so etwas wie:

 If Shape.HasTextFrame Then If Shape.TextFrame.HasText Then ' do your stuff End If End If 
  • Python3 und rekursive Klasse
  • Wie benutzt man concurrent.futures mit Timeouts?
  • Installieren Sie pyquery auf windows
  • Nehmen von Webcam Fotos in Python 3 und Windows
  • Wie kann ich den Dateinamen-Parameter des Content-Disposition-Headers in HTTP decodieren?
  • Durchgehen alle Ordner in Python
  • String in list, in eine Funktion
  • Warum ist das __dict__ von Instanzen so klein in Python 3?
  • Python 3.1- Grid Simulation Konzeptionelle Frage
  • Stackplot mit der Liste der Wörterbuchwerte (Python 3.x)
  • Was ist der Vorteil der neuen Druckfunktion in Python 3.x über die Druckerklärung von Python 2?
  • Python ist die beste Programmiersprache der Welt.