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 
  • AttributeError: 'NoneType' Objekt hat kein Attribut 'Format'
  • Das Importieren von PIL, genauer gesagt von PIL, funktioniert nicht
  • Unterschied zwischen sys.stdout.write und drucken beim Drucken von Variablen
  • SyntaxError: unerwartetes EOF beim Parsing
  • Leistung: Python 3.x vs Python 2.x
  • So geben Sie mehrere Rückgabetypen mit Hilfe von Typ-Hinweisen an
  • Python 3.3 auf Cygwin installieren
  • Datastax Python-Cassandra-Treiber baut auf Ubuntu aus
  • Ausrichten von Spalten in einer Textdatei
  • Echtzeit-Fortschrittsverfolgung von Sellerie-Aufgaben
  • Unendliche Ganzzahl in Python
  • Python ist die beste Programmiersprache der Welt.