2017-10-17 7 views
2

Comme j'ai fait de légers progrès avec le problème actuel depuis que j'ai posté cette question, j'ai trouvé nécessaire de le diviser en deux parties pour maintenir la clarté.Comment puis-je manipuler des formes (couleurs) dans PowerPoint en utilisant Python et win32com.client?


  1. Comment puis-je manipuler les couleurs de forme dans PowerPoint en utilisant Python et win32com.client? Comment puis-je inspecter des objets com en Python en utilisant dir()?

1. Manipulez les couleurs de forme dans PowerPoint en utilisant Python

Il y a quelques exemples sur la façon de modifier des diapositives PowerPoint en utilisant la bibliothèque pptxhere. Cependant, je trouve beaucoup plus facile de manipuler une présentation PowerPoint active en utilisant win32com.client comme décrit here. En utilisant un exemple de Microsoft Developer Network que j'ai trouvé que je peux facilement reproduire parties de la fonctionnalité de cet extrait VBA ...

With ActivePresentation.Slides(1).Shapes(1) 
    With .TextFrame.TextRange.Font 
     .Size = 48 
     .Name = "Palatino" 
     .Bold = True 
     .Color.RGB = RGB(255, 127, 255) 
    End With 
End With 

... avec cet extrait de Python:

import win32com.client 
Application = win32com.client.Dispatch("PowerPoint.Application") 
Presentation = Application.Activepresentation 

slidenr = Presentation.Slides.Count  
slide = Presentation.slides(slidenr) 

shape1 = slide.Shapes.AddTextbox(Orientation=0x1,Left=100,Top=100,Width=100,Height=100) 
shape1.TextFrame.TextRange.Text='Hello, world'  

#Manipulate font size, name and boldness 
shape1.TextFrame.TextRange.Font.Size=20 
shape1.TextFrame.TextRange.Characters(1, 4).Font.Name = "Times New Roman" 
shape1.TextFrame.TextRange.Font.Bold=True 

ici Je suis capable de manipuler la taille et le nom de la police. Je peux également changer l'orientation de la zone de texte en changeant Orientation=0x1 en Orientation=0x5 en shape1 = slide.Shapes.AddTextbox(Orientation=0x1,Left=100,Top=100,Width=100,Height=100).

Ce qui semble impossible, c'est de modifier la couleur de la boîte ou de la police.

Cela ne fonctionne pas:

shape1.TextFrame.TextRange.Font.Color.RGB = RGB(255, 127, 255) 

Message d'erreur:

enter image description here

Je attendais de résoudre ce problème en importer certaines fonctionnalités RVB suivant les informations sur pypi.python.org

Mais J'ai des problèmes ici aussi avec pip install colour:

enter image description here

Maintenant, je suis un peu perdu sur tous les comptes, de sorte que toutes les allusions à un moyen de manipulation des couleurs serait génial!

2. Inspecter les objets en Python en utilisant dir()

Dans mes tentatives pour gérer ces couleurs embêtants, j'ai commencé à inspecter la sortie de dir(shape1.TextFrame), dir(shape1.TextFrame.Textrange) et ainsi de suite. À ma grande déception, je n'ai rien trouvé à propos des couleurs, ni même de Font, bien que Font soit clairement accessible pour la manipulation. Donc, ma deuxième question est la suivante: n'est-ce pas la façon d'inspecter et de manipuler ces formes du tout? Et comment pourrais-je trouver le bon objet (ou méthode?) pour manipuler shape1 plus loin? J'ai regardé le PowerPoint objectmodel, mais avec peu de succès.

Merci pour vos suggestions!

Répondre

1

Vous pouvez recréer la fonction globale VBA facilement dans votre script python

def RGB(red, green, blue): 
    assert 0 <= red <=255  
    assert 0 <= green <=255 
    assert 0 <= blue <=255 
    return red + (green << 8) + (blue << 16) 

À propos de votre 2ème question. Le meilleur endroit pour en apprendre davantage sur ces objets est le navigateur d'objets Macro Excel. Dans Macro Editor, appuyez sur F2, puis filtrez la bibliothèque Powerpoint. Ensuite, vous pouvez rechercher et d'explorer le modèle d'objet juste lié à powerpoint

Object Browser

+0

Merci! Cela semble fonctionner correctement, sauf qu'il semble que les couleurs sont un peu foiré. (255,0,0) est rouge, (0,255,0) est vert et (0,0255) devrait être bleu, mais vert. Des pensées sur pourquoi? – vestland

+1

Mon erreur, S'il vous plaît vérifier la fonction mise à jour –

+0

A propos de la 2ème question, est-il vraiment impossible de localiser ces objets/méthodes dans Python? – vestland