[Résolu][Python]Equivalent 'supportsService'

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

[Résolu][Python]Equivalent 'supportsService'

Message par joel275 »

Bonsoir et bonnes fêtes à toutes-tous,

d'abord merci à jeanmi2403, à LibreOfficiant et à Hubert Lambert pour leurs indications précieuses.
Malgré tout, je ne sais pas déterminer quel objet a été sélectionné par l'utilisateur dans un document writer pour faire un traitement approprié à chaque cas.
J'ai bien vu la fonction native de Python 'hasattr' mais ne sait pas quels paramètres lui passer.
Merci à tous les contributeurs.
Joel.
Dernière modification par joel275 le 31 déc. 2017 08:44, modifié 3 fois.
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 639
Inscription : 09 août 2017 22:15

Re: [Python]Equivalent 'supportsService'

Message par Jurassic Pork »

hello,
je n'ai peut-être pas compris ta question, mais on peut très bien utiliser la fonction SupportsService dans une macro en python.
Voici un exemple de code qui va balayer le texte d'un document writer et qui va afficher paragraphe trouvé à chaque fois qu'un paragraphe est détecté. D'autre part il va afficher le texte contenu dans le paragraphe en séparant ceux qui n'ont pas les mêmes attributs (par exemple du texte coloré).

Code : Tout sélectionner

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

#------------MESSAGEBOX----------------
def messagebox(message):
    doc = XSCRIPTCONTEXT.getDocument()
    win = doc.CurrentController.Frame.ContainerWindow
    tk = win.Toolkit
    box = tk.createMessageBox(win, 3, 1, "Message", message)
    return box.execute()
    
def chercherParagraphes( ):
    document = XSCRIPTCONTEXT.getDocument()
    parenum = document.Text.createEnumeration()
    while parenum.hasMoreElements():
        par = parenum.nextElement()
        if par.supportsService("com.sun.star.text.Paragraph"):
            messagebox("paragraphe trouvé")
            textenum = par.createEnumeration()
            while textenum.hasMoreElements():
                text = textenum.nextElement()
                messagebox(text.getString())

g_exportedScripts = chercherParagraphes,
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
joel275
InconditiOOnnel
InconditiOOnnel
Messages : 839
Inscription : 10 janv. 2009 08:05

Re: [Python]Equivalent 'supportsService'

Message par joel275 »

Bonjour,

merci beaucoup pour ta réponse rapide: mon problème ne venait pas de supportsService, mais d'une erreur de syntaxe Python de néophyte plus habitué à basic qu'à python.
A part ces problèmes de syntaxe, je trouve python facile à apprendre. De plus, le code me semble plus concis et plus facile à relire qu'en basic. Bref, je le recommande chaudement

Bonne année
joel
A jour de LibreOffice et de Ubuntu
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Résolu][Python]Equivalent 'supportsService'

Message par Hubert Lambert »

Bonjour,

À toute fin utile, une petite fonction qui reproduit la fonction HasUnoInterfaces de la bibliothèque basic :

Code : Tout sélectionner

def hasUnoInterfaces(obj, *interfaces):
     return set(interfaces).issubset(t.typeName for t in obj.Types)
À utiliser comme l'originale :

Code : Tout sélectionner

estdoctexte = hasUnoInterfaces(doc, "com.sun.star.text.XTextDocument")
Bon réveillon à tous :) .
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)